Java:从 char 中减去 '0' 得到一个 int ... 为什么这样行得通?

新手上路,请多包涵

这很好用:

 int foo = bar.charAt(1) - '0';

然而这不是——因为 bar.charAt(x) 返回一个字符:

 int foo = bar.charAt(1);

似乎从 char 中减去 ‘0’ 会将其转换为整数。

为什么或如何减去字符串“0”(或者它是一个字符?)将另一个字符转换为整数?

原文由 ledneb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 879
2 个回答

这是一个聪明的把戏。 char 实际上与短裤具有相同的类型/长度。现在,当你有一个表示 ASCII/unicode 数字(如“1”)的 char 时,你从中减去可能的最小 ASCII/unicode 数字(例如“0”),那么你将得到该数字的对应值(因此,1)

因为 char 与 short 相同(尽管是无符号的 short),您可以安全地将其转换为 int。如果涉及算术,转换总是自动完成

原文由 Lukas Eder 发布,翻译遵循 CC BY-SA 2.5 许可协议

这是一个古老的 ASCII 技巧,适用于从“0”开始按顺序排列数字“0”到“9”的任何编码。在 Ascii 中,’0’ 是一个值为 0x30 的字符,’9’ 是一个值为 0x39 的字符。基本上,如果您有一个数字字符,减去“0”会将其“转换”为数字值。

我不得不不同意@Lukas Eder 并认为这是一个可怕的把戏;因为此操作的意图从代码中接近 0%。 If you are using Java and have a String that contains digits and you want to convert said String to an int I suggest that you use Integer.parseInt(yourString);

这种技术的好处对未来的维护程序员来说是显而易见的。

原文由 DwB 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题