Java 为什么';t整数。数字字符的值是否返回其值?

Java 为什么';t整数。数字字符的值是否返回其值?,java,sqldatatypes,Java,Sqldatatypes,我不得不说,这是一个错误,因为我试图将字符串转换为整数,但我没有意识到它是字符类型,而不是整数 但是不知何故,Integer.valueOf仍然可以使用字符参数运行,尽管在中没有提到这一点 虽然它适用于“2”的字符串参数,但它不提供字符参数'2'的预期结果。为什么会发生这种情况 我想知道我是否错过了什么?为什么它返回50而不是2 谢谢 好的,我检查了ASCII表,它返回50,因为字符'2'的索引是50。整数。valueOf(char))给出了ASCII值 Integer.valueOf('2'

我不得不说,这是一个错误,因为我试图将
字符串
转换为
整数
,但我没有意识到它是
字符
类型,而不是
整数

但是不知何故,
Integer.valueOf
仍然可以使用
字符
参数运行,尽管在中没有提到这一点

虽然它适用于
“2”
字符串
参数,但它不提供
字符
参数
'2'
的预期结果。为什么会发生这种情况

我想知道我是否错过了什么?为什么它返回50而不是2

谢谢


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

整数。valueOf(char))给出了ASCII值

Integer.valueOf('2');  // >>> 50
如果你想得到数值

Character.getNumericValue('2'));  // >>> 2
valueOf(char))给出ASCII值

Integer.valueOf('2');  // >>> 50
如果你想得到数值

Character.getNumericValue('2'));  // >>> 2

ASCII表示法应该能为您提供一条线索,说明为什么会出现这种行为

请记住,整数和字符类是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码。隐式和显式转换做同样的事情

如果确实要将包含数字的字符转换为正确的整数,请使用Character.getNumericValue()。例如

现在myInt保存值2


就最佳实践而言,使用这种类型的隐式转换不是一个好主意。这并不能让你明白你想做什么

ASCII表示法应该能为您提供一条线索,说明为什么会出现这种行为

请记住,整数和字符类是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码。隐式和显式转换做同样的事情

如果确实要将包含数字的字符转换为正确的整数,请使用Character.getNumericValue()。例如

现在myInt保存值2


就最佳实践而言,使用这种类型的隐式转换不是一个好主意。这并不能让你明白你想做什么

你是对的,但我想问的是,为什么java允许
Integer.valueOf(Character)
?这不是在JDK文档中编写的。嗯,数字2是作为字符而不是整数传递的。因此Integer.valueOf返回字符“2”的ASCII值。@JamesKPolk、char或Character在这里真的很重要吗?@Rowi:我不确定,可能不会自动取消装箱。@Code\u Control\u jxie0755您是对的,但我想问为什么java允许Integer.valueOf(Character)调用它是因为(JLS-5.1.2链接)(
char
扩展为
int
)。至于为什么允许这样做,
'a'+1=='b'
(我希望这会有所帮助)。你是对的,但我问java为什么允许
Integer.valueOf(Character)
?这不是JDK文档中写的。好吧,数字2作为字符而不是int传递。因此Integer.valueOf返回字符“2”的ASCII值。@JamesKPolk、char或Character在这里真的很重要吗?@Rowi:我不确定,可能不是自动取消装箱。@code\u Control\u jxie0755您是对的,但我问为什么java允许int它之所以调用(Character)是因为(JLS-5.1.2链接)(
char
被扩展为
int
)。至于为什么允许这样做,
'a'+1=='b'
(我希望这会有所帮助).char是无符号16位整数类型。“2”只是指定整数50的另一种方式。“2”==50将返回true。“2”只是升级为int,因为
char
是数字类型,尽管它看起来不像数字类型。char是无符号16位整数类型。“2”只是指定in的另一种方式teger 50。“2'==50将返回true。“2”仅升级为int,因为
char
是数字类型,尽管它看起来不像数字类型。