繁体   English   中英

为什么数字字符的 Integer.valueOf 不返回其值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM