在Java中将Chars转换为Ints

系统: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,如第一个示例中所示? 谢谢。

char (2字节类型)到int (4字节类型)的转换在Java中是隐含的,因为这是一个扩展转换 – 您可以存储在char所有可能值也可以存储在int 。 反向转换不是隐式的,因为它是一个缩小的转换 – 它可能丢失信息( int的高两个字节被丢弃)。 你必须总是在这种情况下明确地投射,作为告诉编译器的一种方式“是的,我知道这可能会丢失信息,但我仍然想要这样做。”

如果C规则是任何东西,你的char可以在你的第一个例子中被自动强制转换为int而没有强制转换,因为转换不涉及信息丢失。

但是,在第二种情况下需要显式强制转换,因为char小于int,因此可能会丢失信息。