2010-11-19 62 views
1

系統:Windows Vista 32位,Java 6.0.2在Java中將字符轉換爲Ints

我有幾個關於將字符轉換爲整數的問題。 我運行下面的代碼,使敏用值4:

char myChar = '4'; 
    int myInt = myChar - '0'; 

現在,這是轉換的東西,Java的自動呢?從ascii'4'減去'0'的ascii值,然後在幕後投射到int?這是混淆了我,因爲當我嘗試反向操作,我必須真正把結果作爲字符:

int anotherInt = 5; 
    char newChar = anotherInt + '0'; //gives error 

    char newChar = (char)(anotherInt + '0'); //works fine 

這是發生的歷史,因爲Java的自動鑄造(anotherInt +「0」)爲int ,如第一個例子中那樣?謝謝。

+0

試着用'int'和'long's來看看會發生什麼。 'int myInt = 1L' – 2010-11-19 01:15:04

回答

22

char(2字節類型)int(4個字節的類型)的轉化是在Java中隱含的,因爲這是一個擴大轉換 - 所有可能的值的可以在一個char你可以存儲也存儲在int。反向轉換並不是隱含的,因爲它是一種縮小的轉換 - 它可能會丟失信息(丟棄int的高兩個字節)。您必須始終明確地投入這些場景,作爲告訴編譯器的一種方式:「是的,我知道這可能會丟失信息,但我仍然希望這樣做。」

+0

謝謝,這很有道理。 – worker1138 2010-11-20 05:55:40

2

如果C規則有什麼值得注意的地方,那麼你的char在第一個例子中可以自動強制轉換爲int,因爲轉換不會導致信息丟失。

但是,在第二種情況下需要顯式強制轉換,因爲char小於int,所以可能會丟失信息。

+8

您不應該嘗試從C中推斷Java的輸入規則。如果您不瞭解Java,那麼最好不要試圖回答Java問題,IMO。 – 2010-11-19 01:15:29

+4

我確實知道Java,我只是對C的輸入規則更加確定。基於我的Java經驗,基於事實上Java基本上是基於C的,並且基於我的觀察,即Java不違揹我知道的C規則,我發佈了我的答案。 – 2010-11-19 01:36:43