将Char作为参数传递给其重载的构造函数时,StringBuffer的行为如何?

时间:2015-06-13 14:45:35

标签: java

    StringBuffer sb = new StringBuffer('A');
    System.out.println("sb = " + sb.toString());
    sb.append("Hello");
    System.out.println("sb = " + sb.toString());

输出:

  

sb =

     

sb =你好

但是如果我传递一个字符串而不是字符,它会附加到Hello。 为什么这个奇怪的行为与char?

2 个答案:

答案 0 :(得分:6)

没有接受[13-Jun-2015 16:19:54 Europe/Berlin] Array ( [is_attachment] => ) [13-Jun-2015 16:19:54 Europe/Berlin] Array ( [0] => Array ([is_attachment] => )) [13-Jun-2015 16:19:55 Europe/Berlin] Array ( [is_attachment] => 1 [filename] => 2015-06-12_1048.png [name] => 2015-06-12_1048.png [attachment] => ‰PNG [13-Jun-2015 16:19:55 Europe/Berlin] Array ( [0] => Array ( [is_attachment] => ) [1] => Array ( [is_attachment] => 1 [filename] => 2015-06-12_1048.png [name] => 2015-06-12_1048.png [attachment] => ‰PNG [13-Jun-2015 16:19:55 Europe/Berlin] Array ( [is_attachment] => 1 [filename] => 5812548c-d445-4a18-a56d-e2698fdfd99b.jpg [name] => 5812548c-d445-4a18-a56d-e2698fdfd99b.jpg [attachment] => ÿØÿà [13-Jun-2015 16:19:55 Europe/Berlin] Array ( [0] => Array ( [is_attachment] => ) [1] => Array ( [is_attachment] => 1 [filename] => 2015-06-12_1048.png [name] => 2015-06-12_1048.png [attachment] => ‰PNG 的构造函数。您最终得到int constructor,因为Java会自动将您的char转换为char,从而指定初始容量。

int

比照。这个最小的例子:

/**
 * Constructs a string buffer with no characters in it and
 * the specified initial capacity.
 *
 * @param      capacity  the initial capacity.
 * @exception  NegativeArraySizeException  if the <code>capacity</code>
 *               argument is less than <code>0</code>.
 */
public StringBuffer(int capacity) {
    super(capacity);
}

输出:

public class StringBufferTest {
    public static void main(String[] args) {
        StringBuffer buf = new StringBuffer('a');
        System.out.println(buf.capacity());
        System.out.println((int) 'a');
        StringBuffer buf2 = new StringBuffer('b');
        System.out.println(buf2.capacity());
        System.out.println((int) 'b');
    }
}

尽管

97
97
98
98

初始容量为StringBuffer buf3 = new StringBuffer("a"); System.out.println(buf3.capacity());

您可能会将17CharSequence混淆(确实存在构造函数),但这些是完全不同的两种情况。

答案 1 :(得分:0)

你使用了下面提到的构造函数。

  

public StringBuffer(int capacity)

     

构造一个字符串缓冲区,其中没有字符和指定的初始容量。

     

参数:   容量 - 初始容量。

参见java doc你没有任何带有char输入参数的构造函数。