将字符串联到字符串 - 使用StringBuilder的append()

时间:2016-08-08 12:19:21

标签: java

我正在研究将char原始值连接起来形成一个字符串,并且发现了这篇文章:

Concatenate chars to form String in java

我知道产生最终String值的正确方法是使用toString()方法,如果我不使用这个方法,我仍然得到相同的输出。我原以为下面的代码会输出对象sb的堆地址,但它仍会打印'ice'。

谢谢。

public class CharsToString {

    public static void main (String args[]) {

    char a, b, c;
    a = 'i';
    b = 'c';
    c = 'e';

    StringBuilder sb = new StringBuilder();
    sb.append(a);
    sb.append(b);
    sb.append(c);

    System.out.println(sb);
    }   
}

5 个答案:

答案 0 :(得分:3)

您需要查看System.out.println(sb);实际执行的操作。 它在类java.io.PrintStream中调用此方法。 (因为StringBuilder扩展了Object)

 public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

String.valueOf(x)调用toString()上的StringBuilder方法。

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

答案 1 :(得分:1)

自动调用StringBuilder对象的toString()方法。

答案 2 :(得分:0)

如果您在System.out.println(Object obj);来电System.out上检查PrintStream println( Object obj )PrintStreamString.valueOf( Object )

对象上的String.valueOf( Object )调用toString(),因此间接System.out.println( StringBuilder sb )调用StringBuilder的{​​{1}},

现在,如果您的对象不是toString(),而且没有StringBuilder,则会打印toString()

答案 3 :(得分:0)

这是因为方法toString()是隐式调用的。 每次,当您尝试打印对象时,它会查找toString()方法。 在这种情况下,println方法接受Object并调用String.valueOf(Object o),它返回Object的String值。

答案 4 :(得分:0)

System.out是一个PrintStream类。所以你看一下这个类的println(Object)的javadoc,你会得到答案:https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-。简而言之,如果使用非原始参数而不是String调用方法println,它将打印对象的toString()方法的输出。因此,在您的情况下,调用System.out.println(sb.toString());System.out.println(sb);会有相同的结果