2012-09-25 65 views
1

的差异,显示字符的默认值,我写了这样的代码:将String.valueOf(焦炭)和+

public class TestChar { 
    static char a; 
    public static void main(String[] args) { 
    System.out.println("."+String.valueOf(a)+"."); 
    System.out.println("the default char is "+a); 
    } 
} 

但控制台输出confused.the第一个“”。然而第二个是“默认的字符是[](这个样子,我不知道如何来形容了。)”为什么?求助

+0

不,我没有看到方括号[]作为输出。它只是空的。 – kosa

+0

到Nambari:但是我的输出是方形的......当然是 –

+0

你正在使用哪个IDE? – kosa

回答

2

正如user1681360提到的,这是您要打印的字符'\0'。您尚未初始化您的字段,因此Java将它初始化为默认值,即不可打印字符'\0'。取决于环境,不可打印的字符将显示为空白框,问号等。

在第一行中,您首先创建String,然后附加它。在第二行中,运算符String + char被编译为java.lang.StringBuilder#append(char),所以您直接将一个字符附加到缓冲区,而不是创建一个临时的String

实际上这两种方法总是相等的,即使有问题的字符是'\0'。字符在Java语言规范中有特殊的处理,但不影响这种特定的行为。

2

感谢一个字符是不是一个字符串。在您的第一个打印语句中,您将字符转换为字符串,然后打印该值。在第二行中,您只是直接打印字符的值。

+2

但是+会将char转换为String.isn't它? –

1

您尚未初始化a的值,因此它等于char a = 0;一个不可打印的字符。

将值初始化为让我们说静态char a ='a';这应该告诉你一些事情。

更新:作为第二字符是不可打印的,显示为正方形,但它实际上是一个“\ 0”字符。

更新2:默认值为0,如数字0,而不是字符'0'。

+0

但第二个是正方形。 –

+0

问题是关于字符的默认值。 –