我不得不说这是一个错误发现,因为我试图将String
转换为Integer
,但是我没有意识到这是一个Character
类型而不是Integer
。
但是,尽管在JDK文档中没有提到,Integer.valueOf
仍然可以与Character
参数一起运行?
System.out.println(Integer.valueOf("2")); // >>> 2
System.out.println(Integer.valueOf('2')); // >>> 50
我想了解我是否想念什么?以及为什么它返回50。
谢谢
好的,我检查了ASCII表,因为Character
'2'
的索引是50,所以它返回50。
答案 0 :(得分:3)
ASCII表示形式应该为您提供有关为何获得此行为的线索。
请记住,Integer和Character类是int和char基本类型的包装。 Integer.valueOf()
与角色一起使用的原因是对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码。隐式和显式强制转换可以做同样的事情。
如果您实际上想将持有数字的char转换为正确的整数,请使用Character.getNumericValue()。例如
char myChar = '2';
int myInt = Character.getNumericValue(myChar);
现在myInt拥有值2。
就最佳实践而言,使用这种类型的隐式转换并不是一个好主意。它并没有使您正在尝试做的事情变得显而易见。
答案 1 :(得分:1)
Integer.valueOf(char))给出ASCII值。
Integer.valueOf('2') >>> 50
如果您想获取数字值,
Character.getNumericValue('2')) >>> 2