gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:40:12 25 4
gpt4 key购买 nike

我不得不说这是一个错误发现,因为我试图将 String 转换为 Integer,但我没有意识到它是Character 类型而不是 Integer

但是不知何故,Integer.valueOf 仍然可以使用 Character 参数运行,尽管这在 JDK documentation 中没有提到。 ?

System.out.println(Integer.valueOf("2"));  // >>> 2
System.out.println(Integer.valueOf('2')); // >>> 50

虽然它适用于 "2"String 参数,但它不能为 Character 参数提供预期的结果>'2'。为什么会这样?

我正在尝试了解是否遗漏了什么?为什么它返回 50 而不是 2?

谢谢


好的,我检查了 ASCII 表,它返回 50,因为 Character '2' 的索引是 50。

最佳答案

ASCII 表示法应该可以让您了解为什么会出现这种行为。

请记住,Integer 和 Character 类是 int 和 char 基本类型的包装器。 Integer.valueOf() 与 Character 一起工作的原因是存在对 Integer 的隐式转换。当您将 Character 转换为 Integer 时,Integer 将保存该 Character 的 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。

就最佳实践而言,使用这种类型的隐式转换并不是一个好主意。它并不能使您清楚地知道您要做什么。

关于java - 为什么数字字符的 Integer.valueOf 不返回其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com