toString方法是否不必要?

时间:2013-05-18 19:00:48

标签: java tostring

我最近在看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);
    }
}

6 个答案:

答案 0 :(得分:2)

根据Java doc toString()

  

返回对象[...]

的字符串表示形式
实际上,libs的许多原生java方法和方法都是如此 调用此方法来获取字符串表示。

例如Arrays.toString(Object[] a)来电 toString表示数组a中的每个对象 或print采用PrintStreamStrings.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());