在我的项目工作期间,我遇到了一个问题。
当我运行以下程序时:
public class test {
public static void main(String[] args) {
String x = "1234";
System.out.println("Int value: " + Integer.valueOf(x.charAt(0)));
System.out.println("String value: " + x.charAt(0));
}
}
它给了我结果:
Int value: 49
String value: 1
让我感到困惑,因为x = "1234"
,所以当它运行第四行时,结果应该与:
System.out.println("Int value: " + Integer.valueOf(1));
理论上应该给我:Int value: 1
那么是什么原因导致结果为49
?
答案 0 :(得分:7)
之间存在差异
System.out.println("Int value: " + Integer.valueOf(1));
和
System.out.println("Int value: " + Integer.valueOf(x.charAt(0)));
在第二行中,真正发生的是这个 -
System.out.println("Int value: " + Integer.valueOf('1'));
请注意' 1'作为字符而不是整数传递。结果,Integer.valueOf返回字符' 1'的ASCII值,即49。
请参阅ASCII table查看。
答案 1 :(得分:3)
这是因为下面返回UTF-16值,而不是值本身
System.out.println("Int value: " + Integer.valueOf(x.charAt(0)));
尝试使用int x = Integer.parseInt("1234");
代替
答案 2 :(得分:1)
49是对应于ASCII字符' 1'的十进制值。看看这张图表,看看" Dec" (十进制值)列,对应于Chr(字符值)' 1'。
A link to an ASCII table that shows you how a given character maps to a given decimal
答案 3 :(得分:1)
您使用的是valueOf(String s)
函数,而不是valueOf(int i)
。 Documentation说,它“返回一个包含指定String值的Integer对象。”。这意味着,该函数返回符号“1”的ASCII码,即49。
答案 4 :(得分:1)
这是因为您打印的ASCII值为1。
尝试Character.getNumericValue(char)
尝试此操作(对您的实施进行最小的更改):
package general;
class CharToInt
{
public static void main(String[] args) {
String x = "1234";
System.out.println("Int value: " + Character.getNumericValue(x.charAt(0)));
System.out.println("String value: " + x.charAt(0));
}
}
答案 5 :(得分:1)
你需要做的是传递一个字符串" 1" into方法" Integer.valueOf()"然后它会将其解析为整数1.为此,你可以这样做
String x = "1234";
System.out.println("Int value: " + Integer.valueOf(s.substring(0,1));
答案 6 :(得分:1)
有一件事是你如何看待传递给函数的参数,但第二件事是这个参数的类型是什么。
x.charAt(0) returns '1'
但必须记住,类型是字符。
所以,实际上它会返回二进制数据,例如:00110001
,其中一个可以像0x31(hex)
那样读取49(dec)
什么是字符'1'
的UTF-16表示
现在......功能:
Integer.valueOf( )
它将数字视为参数,因此它需要那些二进制数据00110001
并将其读作普通数字......它的值为49