Java 为什么这些打印语句的结果不同?
第一个产生65,另一个产生A。他们应该产生相同的东西 你按错误的顺序做。首先,将0转换为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
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);