![](/img/trans.png)
[英]How does (Float value + Integer value + long value) gives unexpected result?
[英]Integer value of gives unexpected result
在處理我的項目時,我遇到了一個問題。
當我運行以下程序時:
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
的原因是什么呢?
兩者之間有區別
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表以了解自己。
這是因為下面返回UTF-16值,而不是值本身
System.out.println("Int value: " + Integer.valueOf(x.charAt(0)));
嘗試使用int x = Integer.parseInt("1234");
代替
49是對應於ASCII字符“1”的十進制值。 看一下這個圖表,看看與Chr(字符值)'1'對應的“Dec”(十進制值)列。
您使用函數valueOf(String s)
,而不是valueOf(int i)
。 文檔說,它“返回一個包含指定String值的Integer對象。”。 這意味着,該函數返回符號“1”的ASCII碼,即49。
這是因為您打印的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));
}
}
你需要做的是將字符串“1”傳遞給方法“Integer.valueOf()”然后它將它解析為整數1.為此,你可以這樣做
String x = "1234"; System.out.println("Int value: " + Integer.valueOf(s.substring(0,1));
一件事是你如何看到傳遞給函數的參數,但第二件事是這個參數的類型是什么。
x.charAt(0) returns '1'
但必須記住,類型是字符 。
所以,實際上它返回二進制數據,如: 00110001
,其中一個可以讀取像0x31(hex)
49(dec)
是什么49(dec)
什么是字符'1'
的UTF-16表示。
現在......功能:
Integer.valueOf( )
它將數字視為參數,因此它需要那些二進制數據00110001
並將其讀取為正常數字......它的值為49
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.