[英]Why doesn't Integer.valueOf of a digit Character return its value?
我不得不说这是一个错误发现的,因为我试图将String
转换为Integer
,但我没有意识到它是Character
类型而不是Integer
。
但是不知何故,尽管JDK 文档中没有提到Integer.valueOf
仍然可以使用Character
参数运行?
System.out.println(Integer.valueOf("2")); // >>> 2
System.out.println(Integer.valueOf('2')); // >>> 50
虽然它适用于"2"
String
参数,但它没有为'2'
Character
参数提供预期的结果。 为什么会发生这种情况?
我想了解我是否错过了什么? 为什么它返回 50 而不是 2?
谢谢
好的,我检查了 ASCII 表,它返回 50,因为Character
'2'
的索引是 50。
ASCII 表示应该为您提供有关为什么会出现这种行为的线索。
请记住,Integer 和 Character 类是 int 和 char 原始类型的包装器。 Integer.valueOf()
与 Character 一起使用的原因是隐式转换为 Integer。 当您将字符转换为整数时,整数将保存该字符的 ASCII 代码。 同样的事情发生在原始类型上。 例如
Character yourChar = new Character('2');
Integer yourInt = Integer.valueOf(yourChar); //Implicit casting
char biz = '2';
int baz = (int)biz; //Explicit casting to int
System.out.println(baz);
System.out.println(yourInt);
在这里,yourInt 和 baz 的值都是 50,因为这是 '2' 的 ASCII 码。 隐式和显式转换做同样的事情。
如果您真的想将包含数字的字符转换为正确的整数,请使用 Character.getNumericValue()。 例如
char myChar = '2';
int myInt = Character.getNumericValue(myChar);
现在 myInt 的值为 2。
就最佳实践而言,使用这种类型的隐式转换并不是一个好主意。 它不会使您尝试做的事情变得很明显。
Integer.valueOf(char)) 给出 ASCII 值。
Integer.valueOf('2'); // >>> 50
如果你想获得数值,那么
Character.getNumericValue('2')); // >>> 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.