在Java中将字符转换为整数

在Java中将字符转换为整数,java,char,int,casting,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 anotherInt = 5; char newChar

系统:Windows Vista 32位,Java 6.0.2

关于将字符转换为整数,我有几个问题。 我运行下面的代码,将myInt的值保留为4:

  char myChar = '4';
  int myInt = myChar - '0';
现在,这种转换是Java自动完成的吗?ascii值“0”是否从ascii“4”中减去,然后在幕后转换为整数?这让我感到困惑,因为当我尝试反向操作时,我必须实际将结果转换为字符:

  int anotherInt = 5;
  char newChar = anotherInt + '0'; //gives error

  char newChar = (char)(anotherInt + '0'); //works fine

这是因为Java自动将(另一个+'0')强制转换为int,如第一个示例中所示吗?多谢各位

char
(2字节类型)到
int
(4字节类型)的转换在Java中是隐式的,因为这是一种更广泛的转换——所有可能的值都可以存储在
char
中,也可以存储在
int
中。反向转换不是隐式的,因为它是一种缩小转换——它可能会丢失信息(int的上两个字节被丢弃)。在这种情况下,您必须始终显式地强制转换,作为告诉编译器“是的,我知道这可能会丢失信息,但我仍然希望这样做。”

char
(2字节类型)到
int
(4字节类型)的转换在Java中是隐式的,因为这是一个加宽转换——所有可能的值都可以存储在
char
中,也可以存储在
int
中。反向转换不是隐式的,因为它是一种缩小转换——它可能会丢失信息(int的上两个字节被丢弃)。在这种情况下,您必须始终显式地强制转换,这是告诉编译器“是的,我知道这可能会丢失信息,但我仍然希望这样做。”

如果可以使用C规则,您的字符可以自动强制转换为int,而无需在第一个示例中强制转换,因为转换不涉及信息丢失


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

如果可以使用C规则,那么在第一个示例中,您的char可以自动强制转换为int,而无需强制转换,因为转换不涉及信息丢失


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

使用
int
s和
long
s进行尝试,看看会发生什么
int-myInt=1L
int
s和
long
s试试,看看会发生什么
int myInt=1L
你不应该试图从C中推断Java的类型规则。如果你不懂Java,你最好不要试图回答Java问题,依我看。我懂Java,我只是对C的类型规则更为明确。基于我的Java经验,基于Java在很大程度上是基于C的事实,并且基于我对Java与我所知道的C规则不矛盾的观察,我发布了我的答案。你不应该试图从C推断Java的类型规则。如果你不懂Java,你最好不要尝试回答Java问题,依我看。我确实懂Java,我只是对C的类型规则更为明确。基于我的Java经验,基于Java基本上是基于C的事实,基于我对Java与我所知道的C规则没有冲突的观察,我发布了我的答案。谢谢,这很有意义。谢谢,这很有意义。