字符上的Java Integer.valueOf

时间:2019-07-05 02:39:37

标签: java sqldatatypes

我不得不说这是一个错误发现,因为我试图将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。

2 个答案:

答案 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