在Java中将Chars转换为Ints

时间:2010-11-19 01:01:38

标签: java char int casting

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

2 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:2)

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

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