Java 我不知道';我不理解toString方法。如何打印对象的内容?

Java 我不知道';我不理解toString方法。如何打印对象的内容?,java,object,tostring,Java,Object,Tostring,通常在java中,我知道如果我们尝试打印多个对象(例如名为Joe、Steve、Richard的对象),就像这样 System.out.println(Joe); System.out.println(Steve); System.out.println(Richard); 结果将是内存位置,而不是对象本身。但是如果我只对其中一个调用toString方法,它会正常打印对象的内容,这就是我无法理解的 另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它? 多谢各位 publ

通常在java中,我知道如果我们尝试打印多个对象(例如名为Joe、Steve、Richard的对象),就像这样

System.out.println(Joe);
System.out.println(Steve);
System.out.println(Richard);

结果将是内存位置,而不是对象本身。但是如果我只对其中一个调用toString方法,它会正常打印对象的内容,这就是我无法理解的

另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它? 多谢各位

public class Time {
int Hours;
int Minutes;
int Seconds;

public Time(int h, int m, int s){
    Hours = h;
    Minutes = m;
    Seconds = s;
}
public Time(){
    Hours = 0;
    Minutes = 0;
    Seconds = 0;
}
public int hours ( )
 {
return Hours ;
 }
public int minutes ( )
{
return Minutes ;
 }
public int seconds ( )
 {
return Seconds;
 }
 public void addhour ( )
 {
if ( Hours == 23)
{
Hours = 0 ;
}
else Hours++;
}
public void addminute ( )
{
if (Minutes == 59)
    {
Minutes = 0 ;
addhour ( ) ;
   }
else Minutes++;
 }
public void addsecond ( )
{
if ( Seconds == 59)
{
Seconds = 0 ;
addminute ( ) ;
 }
 else Seconds++;
 }
 public String toString(){
return "Time now is " + Hours + ":" + Minutes + ":" + Seconds;
    }
  public static void main (String[] args) {
    Time t = new Time (23, 59, 59);
    Time r = new Time (22, 59, 59);
System.out.println(t) ;
System.out.println(r) ;
t.addhour( );
System.out.println(t) ;
t.addminute( );
System.out.println(t) ;
t.addsecond( ) ;
System.out.println(t.toString());
                   }


 }
输出为:

现在是23:59:59

现在是22:59:59

现在是0:59:59

现在是1:0:59

现在是1:1:0

结果将是内存位置,而不是对象本身

如果尚未在类中重写toString()方法,则为否。将使用对象类的默认toString()方法。i、 e

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
它将打印类名及其哈希值

另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它


它被称为覆盖,这样当你打印对象时,你的自定义toString()被调用,而不是打印类名和散列的默认toString()。

如果Joe(一个人)是对象,那么对象的对象和属性有两个,而不是高度、宽度等是他的属性

System.out.println(Joe);<---it'll print reference

System.out.println(Joe.height);<----It will print attribute assigned to Object
进入内存以查找引用获取该引用以关联其属性,
println()
调用
toString()
并打印值


您的
toString()
方法是
重写类中的实际方法,因为
对象是所有类的超类

public String toString(){
return "Time now is " + Hours + ":" + Minutes + ":" + Seconds;
    }

另一种方式

若您想获得对象的所有属性,可以创建方法

public String method(YourClass o)
{
return o.hour+":"+o.minute+":"+o.second;
}

这通常是一种打印对象内部值的方法。如果不重写,它将显示对象的默认字符串表示形式,这通常是没有意义的

它不是强制性的,但在调试代码或在控制台中打印数据时通常很有用。

toString()是为所有对象预定义的,默认为您描述的行为


您需要重新定义它,因为作为程序员,您所期望的行为是独一无二的。如果反对Joe print“Joe”、“Joe Beluchi”或“Joe,23岁,居住在纽约”。

在您的情况下,您必须重写ToString方法并对其进行自定义,以便打印所需的信息

例如,如果您的对象是Person,则可以按如下方式重写ToString(在Person类中):

@Override public class Person {

 return "Person{" + "Name=" + this.name + ",
               Surname=" + this.surname + ",
               Date of birth=" + this.birth + '}';


}

“如果我只对其中一个调用toString方法,它将正常打印对象的内容”-请构造一个测试用例来演示这一点。toString根本不打印任何内容。它只返回实例的基于字符串的表示形式,并且可以打印该表示形式。您已经重写了
toString
,因此当您打印对象时,将调用该代码。您期望得到什么?但如何打印整个对象,而不仅仅是一个属性?您正在做您应该做的事情,以覆盖
toString
,或者您可以创建一个方法,该方法将对象作为参数,并返回该对象所有属性的字符串。
@Override public class Person {

 return "Person{" + "Name=" + this.name + ",
               Surname=" + this.surname + ",
               Date of birth=" + this.birth + '}';


}