【问题标题】:Converting Chars to Ints in Java在 Java 中将字符转换为整数
【发布时间】:2011-05-12 09:30:55
【问题描述】:

系统:Windows Vista 32 位,Java 6.0.2

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

  char myChar = '4';
  int myInt = myChar - '0';

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

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

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

发生这种情况是因为 Java 自动将 (anotherInt + '0') 强制转换为 int,如第一个示例所示?谢谢你。

【问题讨论】:

  • int s 和long s 试试看会发生什么。 int myInt = 1L

标签: java char int casting


【解决方案1】:

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

【讨论】:

  • 谢谢,这很有意义。
【解决方案2】:

如果要遵循 C 规则,则在您的第一个示例中,您的 char 可以自动强制转换为 int 而无需强制转换,因为转换不会丢失信息。

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

【讨论】:

  • 你不应该试图从 C 中推断 Java 的打字规则。如果你不懂 Java,最好不要尝试回答 Java 问题,IMO。
  • 我确实了解 Java,但我对 C 的类型规则更加明确。根据我的 Java 经验,基于 Java 主要基于 C 的事实,以及基于我观察到 Java 没有t 与我知道的 C 规则相矛盾,我发布了我的答案。
猜你喜欢
  • 2013-10-23
  • 2017-12-04
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多