2016-02-05 448 views
-2

我剛纔執行下面的一段代碼,爲什麼編譯器不給下面的代碼編譯器錯誤?

char a=5; 
System.out.println(a); 

打印語句打印什麼,但是當在Eclipse中執行的方盒子。 它可能會給編譯器錯誤嗎?因爲上面的代碼沒有任何意義..請糾正我,如果我錯了。

+0

它將打印5的ASCII值。它是有道理的。 –

+0

char被定義爲不帶引號char a = 5; –

+0

嘗試此鏈接:[ASCII值](http://ascii.cl/?wb48617274=5D681385) –

回答

1

該代碼是有道理的。

您正在創建一個Unicode代碼點5(與ASCII code 5相同)的字符,該字符是非打印字符。

在其他情況下(不打印它)這樣做可能有意義,並且它對於可打印字符當然有意義。

如果你想打印的數字「五」,你可以做

char a = '5'; // using a character literal 
char b = 53; // using an integer literal (for the code point) 
0

您正在爲char數據類型分配一個整數值,並且它將打印隨機符號,因爲編譯器無法獲取char「a」值的值。

0

char a=5;是完全有效的。在Java中,字符不僅僅是單個字母,它也可以是ASCII字符的數字表示。 5是一個「查詢」字符。如果你設置了char a = 126,你會得到代字符。

1

char是在0到65535範圍內的無符號的整數(我認爲,它是爲0xFFFF),其打印出作爲對應於該號碼的Unicode字符,假設計算機支持Unicode。值0到127(0x7f)對應於Unicode的原始前體(ASCII),0到255(0xff)是擴展的ASCII。

char值已經是整數。你可以用它們做算術。

1

您正在將字符代碼5分配給變量a。看看這個ASCII Table。 ASCII 5不可打印,例如,如果將此值更改爲35,則會打印出#。通過這種方式,Java(和其他語言)允許您對字符值執行算法。

char a = 35; 
    while (a < 100) { 
     System.out.println(a); 
     a++; 
    } 
5

char類型在Java中有兩層含義排序。它是一個整數類型(一個char可以具有從0到65535的值),但其目的是表示Unicode字符(至少是基本多語言平面中的那些字符)。如果用System.out.println打印出來,程序將打印由整數表示的字符,而不是整數本身。

雖然它是一個整數類型,但您可以爲其指定一個整數。例如,由於字符'A'用Unicode中的整數65表示,因此語句c = 65;c = 'A';完全等效。

因此,該程序沒有任何違法行爲。但是,Unicode中的字符5(以前是ASCII)是一種「控制字符」,在打印時不會顯示爲任何內容。

+0

'char'不限於Unicode BMP;它可以包含一個UTF-16 [代理](http://www.unicode.org/glossary/#surrogate_pair),它們成對使用來表示一個Unicode代碼點。因此,你不能說它代表一個角色,而不知道它不是代理人。 –

+0

是的,我也忽略了65534和65535不代表Unicode字符的事實。當然這些細節對OP沒有任何興趣。 – ajb

0

此代碼沒有錯誤。你可以給一個char變量賦一個int值。如果你可以通過分配一些int值來做一個for循環,你可以看到其他一些字符而不是box。

相關問題