Java 为什么这些打印语句的结果不同?

Java 为什么这些打印语句的结果不同?,java,Java,第一个产生65,另一个产生A。他们应该产生相同的东西 你按错误的顺序做。首先,将0转换为char,然后将65添加到int,这是一个隐式转换。您首先需要添加值,然后执行强制转换 String test = (String)String.valueOf(((char) 0 + 65)); System.out.println( test); test = "A"; System.out.println(test); 然后,您的代码将产生预期的结果: String test = String.v

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

你按错误的顺序做。首先,将0转换为
char
,然后将65添加到
int
,这是一个隐式转换。您首先需要添加值,然后执行强制转换

String test = (String)String.valueOf(((char) 0 + 65));
System.out.println( test);
test = "A"; 
System.out.println(test);
然后,您的代码将产生预期的结果:

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

你按错误的顺序做。首先,将0转换为
char
,然后将65添加到
int
,这是一个隐式转换。您首先需要添加值,然后执行强制转换

String test = (String)String.valueOf(((char) 0 + 65));
System.out.println( test);
test = "A"; 
System.out.println(test);
然后,您的代码将产生预期的结果:

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

第一个表达式与

A
A

那是

`\0` + 65

这是因为铸造优先

要获得字符类型和
a
,需要在计算后进行强制转换

65

第一个表达式与

A
A

那是

`\0` + 65

这是因为铸造优先

要获得字符类型和
a
,需要在计算后进行强制转换

65

这是因为运算符优先级(强制转换,相对于加法)与您期望的不同

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

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

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

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

这是因为运算符优先级(强制转换,相对于加法)与您期望的不同

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

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

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

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