为什么这些打印声明会有所不同?

时间:2016-03-08 11:29:49

标签: java

String test = (String)String.valueOf(((char) 0 + 65));
System.out.println( test);
test = "A"; 
System.out.println(test);

第一个产生65,另一个产生A.它们应该产生相同的东西。

3 个答案:

答案 0 :(得分:4)

您按错误的顺序执行此操作。首先,您将零转换为char,然后添加65,这是对int的隐式转换。首先需要添加值,然后进行强制转换。

 String test = String.valueOf((char)( 0 + 65));

然后您的代码产生预期结果:

A
A

答案 1 :(得分:1)

这是由于操作员优先级(铸造,相对于添加)不符合您的预期。

您希望首先发生0 + 65,然后然后,以便将结果转换为char。但是,强制转换比添加更紧密,因此首先发生(char) 0,然后将其添加到65。

由于这是两个数字加在一起,结果是数字65,这就是转换为字符串的结果(因此产生两个字符串['6', '5']

您可以稍后使用括号围绕算术表达式进行转换:

String.valueOf((char)(0 + 65))

答案 2 :(得分:0)

第一个表达式与

相同
(char) 0 + 65

`\0` + 65

(int) `\0` + 65

65

这是因为施法优先。

要获得一个字符类型和A,您需要在进行计算后进行投射

char ch = (char) (0 + 65)
System.out.println(ch);