系统:Windows Vista 32位,Java 6.0.2
我有几个关于将字符转换为字符的问题。 我运行下面的代码,将myInt保留为值4:
char myChar = '4';
int myInt = myChar - '0';
现在,这种转换是Java自动完成的吗?将ascii值'0'从ascii'4'减去,然后在幕后投射到一个int?这对我来说很困惑,因为当我尝试反向操作时,我必须实际将结果转换为char:
int anotherInt = 5;
char newChar = anotherInt + '0'; //gives error
char newChar = (char)(anotherInt + '0'); //works fine
是否会发生这种情况,因为Java会自动将(anotherInt +'0')转换为int,如第一个示例中所示?谢谢。
答案 0 :(得分:22)
从char
(2字节类型)到int
(4字节类型)的转换在Java中是隐含的,因为这是一个扩展转换 - 所有可能的值你可以存储在char
中,您也可以存储在int
中。反向转换不是隐含的,因为它是一个缩小的转换 - 它可能丢失信息(int
的高两个字节被丢弃)。你必须总是在这种情况下明确地投射,作为一种告诉编译器的方式“是的,我知道这可能会丢失信息,但我仍然想要这样做。”
答案 1 :(得分:2)
如果C规则是任何事情,你的char可以在第一个例子中被自动强制转换成没有强制转换的int,因为转换不会丢失信息。
但是,在第二种情况下需要显式强制转换,因为char小于int,因此可能会丢失信息。