Java:从char减去'0'得到一个int ...为什么这个工作?

led*_*neb 35 java

这很好用:

int foo = bar.charAt(1) - '0';
Run Code Online (Sandbox Code Playgroud)

但这不是 - 因为bar.charAt(x)返回一个char:

int foo = bar.charAt(1);
Run Code Online (Sandbox Code Playgroud)

似乎从char中减去'0'会将其转换为整数.

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

Luk*_*der 35

这是一个聪明的伎俩.char实际上与短裤的类型/长度相同.现在当你有一个表示ASCII/unicode数字(如'1')的字符,并从中减去最小的ASCII/unicode数字(例如'0'),那么你将留下数字的相应值(因此,1)

因为char与short相同(尽管是unsigned short),所以可以安全地将它转换为int.如果涉及算术,则铸件总是自动完成

  • 短裤可以有负值,而char则没有.也不是ASCII而是unicode(小而重要的区别):试试`int y ='\ uffff' - '\ ufffe';` (3认同)

DwB*_*DwB 13

这是一个旧的ASCII技巧,适用于从'0'开始依次排列数字'0'到'9'的任何编码.在Ascii中,'0'是一个值为0x30且'9'为0x39的字符.基本上,如果你有一个数字的字符,减去'0'"将"转换为它的数字值.

我不得不同意@Lukas Eder并暗示这是一个可怕的伎俩; 因为这个动作的意图从代码中明显看出0%.如果您正在使用Java并且String包含数字,并且您希望将其转换Stringint我建议您使用的数字Integer.parseInt(yourString);.

这种技术对于未来的维护程序员来说具有明显的好处.

  • 这是一个聪明的伎俩.聪明总是坏事.它与优雅相反:-) (3认同)