我最近在看toStrings的教程,因为我还没有使用它们,而且我想到可能有一种更简单的方法来用更少的代码完成同样的事情。当然,下面的代码用更少的代码产生完全相同的结果。
如果是这种情况,那么toString的重点是什么?使用toStrings比我做的方式有优势吗?
public class daughter{
private static String name;
private static int age;
public daughter(String name, int age){
this.name = name;
this.age = age;
System.out.println(name + ", " + age);
}
public static void main(String args[]){
new daughter("Elizabeth", 7);
}
}
答案 0 :(得分:2)
根据Java doc toString()
实际上,libs的许多原生java方法和方法都是如此 调用此方法来获取字符串表示。返回对象[...]
的字符串表示形式
例如Arrays.toString(Object[] a)
来电
toString表示数组a中的每个对象
或print采用PrintStream
的Strings.valueOf(Object obj)
方法
作为参数的对象通过
间接地调用它
{{3}}
答案 1 :(得分:1)
toString()
方法会对您有所帮助
以下是我的头脑
toString()
进行调试,那么您将不必展开实例并在调试器中查看其字段答案 2 :(得分:1)
我相信这是因为当你这样做时,有一个内部的toString(或者是对于所有实际目的来说都是toString),作为连接运算符的一部分被调用。
toString仍然可用于更好地控制输出格式等。但如果你不需要它,那很好。
答案 3 :(得分:1)
您的示例有效的原因实际上是由于toString()
的有用性。您正在将String
对象(name
)和int
文字(age
)与String
文字(", "
)联系在一起声明。这样做是隐含地在连接的所有内容上调用toString()
。 String
对象在其中定义了toString()
方法,该方法返回String
的内部char
数组的内容以进行连接。 int
只是将其固有值用作原语(尽管Integer
可能会发生一些autoboxing,但这最终会调用toString()
中定义的Integer
方法无论如何Daughter
班。)
您应该尝试的是打印实际的daughter
对象(我将Daughter
大写为public static void main(String args[]) {
Daughter d = new Daughter("Elizabeth", 7);
System.out.println("Daughter: " + d);
}
,因为这是类名称的标准Java实践):
toString()
你会注意到你的输出看起来像这样:
女儿:女儿@ a62b39f
这是因为您的Daughter
类中没有定义java.lang.Object
方法,所以它使用default toString()
method类中定义的java.lang.Object
的返回值(有些人称之为“所有对象之母”,因为 Java中的所有对象最终都是从toString()
继承而来的。这个默认的toString()
方法只打印出类名和特定对象所在的内存位置(技术上是对象的哈希码,但这通常只是内存地址,无论如何通常都没有用)。 / p>
如果您在Daughter
类中定义public String toString() {
return this.name + ", " + this.age;
}
方法,请执行以下操作:
System.out.println("Daughter: " + d);
那么你应该得到这样的输出
女儿:伊丽莎白,7岁
当您在main
方法中调用toString()
时(或在任何Daughter
对象上显式或隐式调用{{1}}方法的其他任何地方)。
答案 4 :(得分:0)
使用toString
方法,您可以使用子对象
答案 5 :(得分:0)
只需查看它用于Date
的{{1}}类,即可让用户查看对象中的当前toString
:
Date&Time
将打印: Mon 8月29日13:22:03 BST 2012
除了它能够转换非String对象(可以转换为字符串 - ) 到弦乐队 例如:
System.out.println(new Date());