我有一个简单的代码块,有人可以向我解释为什么这在Java中可以接受吗?
int a = 10;
int c = 'A' + (a -1);
System.out.println(c);
在编译器中显示的结果是: 74 。 那么,七十年代的价值到底从何而来? 感谢您的回答。
答案 0 :(得分:5)
在Java中,char
可以(显式或隐式)转换为int
,然后使用与此字符关联的ASCII值。
您的情况是,七十年代来自字符'A'
。该字符的ASCII值为65
。因此,系统会隐式进行强制转换'A' → 65
。您的计算会做到:
c = 'A' + (a-1)
↓
c = 65 + (10-1)
↓
c = 74
答案 1 :(得分:2)
ascii
的{{1}}值为65。请检查此link以获取完整参考。通过使用其unicode值(隐式)将char数据类型扩展为int数据类型来进行转换,在这种情况下,'A'
的值为65(jls 5.6.1)。
答案 2 :(得分:0)
Char被隐式转换为整数,结果“ A” = 65 所以65 + 9 = 74
答案 3 :(得分:0)
将一种数据类型的值分配给另一种数据类型时,这两种类型可能彼此不兼容。应该将其强制转换为正确的类型:
有2种类型:-
byte-> short-> int-> long-> float-> double
char-> int
示例:
int i = 100; //i is 100
float f = i; // f is 100.0
double-> float-> long-> int-> short-> byte
示例:
double d = 100.100; //d is 100.100
int i = (int)d; //i is 100
因此,当在整数上下文中使用字符值时。它会自动转换为int。 就您而言:
int a = 10;
int c = 'A' + (a -1); //c = 65 + (10-1)
'A'ascii值为65,因此得到c = 74
希望这会有所帮助。