返回或打印StringBuilder?Java的

wha*_*les 3 java

我对StringBuilder有点困惑.看来当我打印一个StringBuilder时,不需要添加.toString(),因为它会自动给我一个字符串表示.但是,当我返回一个StringBuilder对象时,我必须添加.toString().真的吗?为什么?

另外,我对以下代码感到有点困惑:

package com.tutorialspoint;
import java.lang.*;
public class StringBuilderDemo {
    public static void main(String[] args) {

        StringBuilder str = new StringBuilder("India ");
        System.out.println("string = " + str);

        // append character to the StringBuilder
        str.append('!');
        // convert to string object and print it
        System.out.println("After append = " + str.toString());

        str = new StringBuilder("Hi "); 
        System.out.println("string = " + str);
        // append integer to the StringBuilder
        str.append(123);
        // convert to string object and print it
        System.out.println("After append = " + str.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

对于不同的println,有时这个代码使用toString,有时则不使用.为什么?我尝试删除toString,结果是一样的.是否仍然需要在println中使用toString?

非常感谢帮助新手!

Men*_*ena 8

将对象打印到打印流时,将打印该对象的String表示形式,从而toString调用该对象.

有些类会覆盖Object#toString,其中包括StringBuilder.

因此,明确调用toStringStringBuilder是不必要的.

另一方面,其他对象不会覆盖toString.例如,数组.

当你打印一个数组时,除非使用像这样的实用程序,否则Arrays.toString你得到的数组类会键入@其哈希代码,而不是人类可读的内容表示.


dgu*_*uay 6

从文档:

请注意,println()打印字符串构建器,如下所示:

System.out.println(sb);
Run Code Online (Sandbox Code Playgroud)

因为sb.toString()是隐式调用的,因为它与println()调用中的任何其他对象一样.