4

我最近在看一个关于 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);
    }
}
4

6 回答 6

2

根据Java文档 toString()

返回对象的字符串表示[...]

事实上,很多原生的java方法和libs的方法都
调用这个方法来获取字符串表示。

例如,为数组 a 中的每个对象Arrays.toString(Object[] a)调用
toString。
或者将对象作为参数的打印方法通过 间接调用它PrintStream

Strings.valueOf(Object obj)

于 2013-05-18T19:07:00.930 回答
1

您的示例有效的原因实际上是由于toString()' 的用处。您在 print 语句中将String对象 ( name) 和int文字 ( age) 与String文字 ( ) 连接起来。", "这样做是隐含地调用toString()所有被连接的东西。String对象中定义了一个方法toString(),该方法返回String' 的内部char数组的内容以进行连接。只是将int其固有值用作原语(尽管可能会在那里发生一些自动装箱Integer,但这最终只会调用类中toString()定义的方法Integer)。

您真正应该尝试的是打印您的实际Daughter对象(我正在使用它daughterDaughter因为这是类名的标准 Java 实践):

public static void main(String args[]) {
    Daughter d = new Daughter("Elizabeth", 7);
    System.out.println("Daughter: " + d);
}

你会注意到你的输出看起来像这样:

女儿:女儿@a62b39f

这是因为你的类中没有toString()定义方法Daughter,所以它使用类中定义的默认toString()方法java.lang.Object的返回值(有些人称之为“所有对象之母”,因为Java 中的所有对象最终都继承自java.lang.Object)。此默认toString()方法仅打印出特定对象所在的类名和内存位置(技术上是对象的哈希码,但这通常只是内存地址,无论如何这通常没有多大帮助)。

如果您改为在类中定义一个toString()方法,如下所示:Daughter

public String toString() {
    return this.name + ", " + this.age;
}

那么你应该得到这样的输出

女儿:伊丽莎白,7 岁

当您调用System.out.println("Daughter: " + d);方法时main(或在任何对象toString()上显式或隐式调用该方法的任何其他位置)。Daughter

于 2013-05-18T19:25:53.103 回答
1

toString()方法会在很多情况下帮助你

以下是我的头顶

  • 如果您只想以漂亮的方式打印对象
  • 当你调试时,如果你有toString()表达方式,那么你就不必扩展实例并在调试器中查看它的字段
于 2013-05-18T19:03:31.000 回答
1

我相信这是因为当你这样做时,有一个内部 toString (或对所有实际用途的 toString 等价物)被称为串联运算符的一部分。

toString 对于更好地控制输出格式等仍然有用。但如果你不需要它,那也没关系。

于 2013-05-18T19:03:35.203 回答
0

只需查看Date它用来toString使用户能够查看Date&TimeObject 中的电流的类:

System.out.println(new Date());

将打印: 2012 年 8 月 29 日星期一 13:22:03 BST

除了它能够将非字符串对象(可以转换为字符串)转换为字符串
例如:

Integer x=4;
System.out.println(x.toString)// prints: 4
于 2013-05-18T19:41:06.867 回答
0

使用toString方法,您可以使用子对象在任何地方打印信息

于 2013-05-18T19:03:54.107 回答