String test = (String)String.valueOf(((char) 0 + 65));
System.out.println(test);
test = "A";
System.out.println(test);
第一个产生65个,另一个产生A.它们应该产生相同的东西。这些打印语句为什么会有所不同?
String test = (String)String.valueOf(((char) 0 + 65));
System.out.println(test);
test = "A";
System.out.println(test);
第一个产生65个,另一个产生A.它们应该产生相同的东西。这些打印语句为什么会有所不同?
你这样做的顺序是错误的。首先你将零投射到char
,并且你添加65,这是隐含投射到int
。您首先需要添加值,然后进行演员。
String test = String.valueOf((char)(0 + 65));
然后代码产生预期的结果:
A
A
第一个表达式是相同的
(char) 0 + 65
是
`\0` + 65
这是
(int) `\0` + 65
或
65
这是因为铸造优先。
为了得到一个char类型和A
你需要投你做计算
char ch = (char) (0 + 65)
System.out.println(ch);
这是由于运算符优先级(铸造的,相对于加)后不是你所期望的。
您希望0 + 65
先发生,然后然后将结果转换为字符。但是,投射比添加更紧密,所以(char) 0
首先发生,然后它被添加到65.
由于这是两个数字加在一起,结果是数字65,这是什么被转换成一个字符串(所以导致两个字符串['6', '5']
您可以铸造与周围的算术表达式支架后发生:
String.valueOf((char)(0 + 65))