2010-07-10 38 views
1

我對Java處理轉換的方式有點困惑。java - 如果數組有int值,print()不會輸出char數組?

我有字符數組包括0(不是 '0')

char[] bar = {0, 'a', 'b'}; 
System.out.println(String.valueOf(bar)); 

當發生這種情況的println方法不輸出任何東西。但是,當我將零視爲字符時:

char[] bar = {'0', 'a', 'b'}; 
System.out.println(String.valueOf(bar)); 

然後它按預期輸出「0ab」。

我的理解是如果聲明基本類型的陣列中包含空值:

炭[]富=新的char [10];

在Java中,這些空單元格的默認值爲0,所以我認爲可以在char數組中使用0,但似乎不是。任何人都可以解釋爲什麼打印方法甚至不輸出'a'和'b'?

+1

這是確定在你贏得意義上的字符數組有0」不要被捕。但爲什麼你會期望輸出是字符「0」?如果酒吧的第一個元素是48,那麼就會得到這個結果。0對應於nul字符,也許您的顯示設備在獲取該字符時會做一些「有趣」的事情。 – 2010-07-10 02:08:36

+0

當我在Eclipse中運行這個時,我得到'ab',所以我打賭@GregS是正確的。 – 2010-07-10 02:12:49

+0

嗯我也使用Eclipse .. – 2010-07-10 02:28:50

回答

2

正如您所發現的,整數0和字符文字'0'的字符值不同。要將數字轉換爲十進制數字的字符表示,你需要做的是這樣的:

int digit = ... // some value between 0 and 9 
char ch = (char)(digit + '0'); 

你也可以這樣做,因爲:

int digit = ... 
char ch = Character.forDigit(digit, radix); 

其中radixCharacter.MIN_RADIX之間的值Character.MAX_RADIX10的基數爲您提供了一個十進制數字。見Character.forDigit(int,int)

字符值零是Unicode代碼點NULL(0x0000)。這是一個不可顯示的「控制字符」。如果你嘗試顯示它,你很可能看不到任何東西(如你所得到的),或者一個特殊的字形,意思是「我不能顯示這個字符」。

2

您的困惑比標題暗示的更爲基本,它與陣列或打印無關,但與Java(以及許多語言中的C)中的char數據類型無關。 嘗試此:

char c1 = 0; 
char c2 = '0'; 
System.out.println(c1 == c2); // false 

並進一步:

 char c1 = 48; // unicode code-point of character '0' = 0x30 = 48 
    char c2 = '0'; 
    System.out.println(c1 == c2); // true 
    c1 = 97; // unicode code-point of character 'a' = 0x61 = 97 
    c2 = 'a'; 
    System.out.println(c1 == c2); // true 

見,char數據類型是真的,其中(常規)表示碼點,即assignated爲文本的數值的整數值字符在Unicode (假設我們在BMP裏面)(並且回想起對於ASCII字符,即低於128的碼點,ASCII和Unicode具有相同的碼點)。所以,char c1='a'是那種快捷地說「分配C1對應於字符‘A’的碼點的整數值」

+0

thx的提示!不知道它被視爲unicode – 2010-07-10 02:37:08