2017-04-06 73 views
4

我想知道當您嘗試打印char默認值時,它將在控制檯上顯示的內容。但不幸的是,我在控制檯上看不到任何東西。爲什麼?

我應該可以看到0的權利。由於char變量的默認值是空字符,即'\u0000'(其十進制等效值爲0)?如我錯了請糾正我。爲什麼在控制檯上不顯示字符默認值?

代碼:

public class Index { 
    static char c; 
    public static void main(String[] args) { 
     System.out.println("char default value is: "+Index.c); 
    } 
} 

輸出控制檯:

enter image description here

+1

如果你寫了'static char c = 65;',你會期望它打印了'65'還是'A'? –

+1

由於您是從靜態方法調用的,因此您可以通過引用'c'而不是'Index.c'來打印。 –

回答

10

有一個爲 「十進制數0」,這是U+0030字符之間有很大的區別...和U+0000,空字符,這是一個控制字符,因此沒有打印輸出。你打印出後者,所以我不希望看到0

要想想另一種方式,可以考慮:

System.out.println("a\u0009b"); 

你會想到,打印「A9B」?你不應該因爲U + 0008是製表符,所以你會看到類似「a b」的東西,它們之間有一些可變數量的空格,具體取決於你的輸出設備的功能。

4

很久以前,我年輕的時候,有一種叫做ASCII table的東西。 那時候,只有128個不同的數字表示,比如'a'或'@'這樣的字符或者某種類型的終端行爲。

但即使在那個時候「0」字符有十進制值48

現在的東西都有點變了,現在我們的Unicode,UTF-8,UTF-16等

但是故事並沒有太多改變,對於每個字符,都有一個代碼表示給定編碼中的字符。

正如你可能已經理解'\ u0000'不是字符0

看看UTF-8 table看哪個字符是哪個代碼。

char zero = '0'; 
System.out.println(String.format("%d", (int)zero)); 
System.out.println(String.format("%04X", (int)zero)); 

更新

一個小更新這個帖子由@TomBlodget

好心建議我們還應該提到ISO-8859-1歐洲共同編碼。它能夠編碼ààöòåèéüù和其他字符只有一個字節,前127個字符與US-ASCII相同(爲了方便起見,通常是這樣)。

而如何忘記着名的OEM437代碼頁?這種字符集在任何EGA和VGA兼容圖形卡的核心中都保留了很長時間的主要字體。

我還會補充一點,非常常見的UTF-8編碼也包含US-ASCII字符集,但它會將字符編碼爲兩個字節。

+0

你的文章以另一種方式幫助我! – Chip

+0

不知道我得到了什麼意思... :)但無論如何,我很高興你找出 – freedev

+0

說,我通過你發佈的ASCII表格算出來。 @freedev – Chip

2

char的默認值是\u0000。即使小數點等於0,也不會看到零,就像執行以下操作將打印A而不是65

static char c = 65; 
System.out.println(c); 

爲您的代碼,如果你這樣做System.out.println(c==0);它將返回true,因爲它們是等價的像你提到的。

相關問題