簡體   English   中英

整數值給出意想不到的結果

[英]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”(十進制值)列。

指向ASCII表的鏈接,顯示給定字符如何映射到給定的小數

您使用函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM