2011-09-20 77 views
0

所以法律Java操作如下:與整數和焦炭

char x = 88; 

int number = 8 + 'E'; 

char x = 'a' + 8; 

是合法的Java經營權?

「因爲我的Java老師的話說,ONLY字符在單引號是合法的char和我有明天的考試,所以我想確保我是對的,她並不標誌着我錯了。

而且,我試着用int和東西玩弄像int x = 40 + 'a'char x = 5 + 'd',他們都得到預測結果(如果我指的是ASCII表)沒有任何類型的錯誤。

+6

有之間的「法律」和「好主意」 :-) – paxdiablo

+4

如果你被標錯的東西,實際上是正確的,挑戰你的老師一個巨大的差異。 –

回答

0

是的,您可以使用/分配一個整數(ASCII)值或一個字符本身到一個char變量。最終將相同的值分配給變量。

但是,您的老師可能會試圖建議您一個最佳實踐,其中使用字符而不是ASCII值更具可讀性。

+0

你的答案的這部分是不正確的 - *「最終都以字節的形式分配給變量」* - 在Java中,'char'值是無符號的16位數。 –

+1

Java char是用於表示UTF-16代碼單元的16位無符號值。它們不一定是字節。 –

+0

@亨寧麥克霍爾姆:他們不一定是角色。 ☺ –

0

如果這實際上是你的老師所說的話,那麼她是不正確的,你應該能夠編寫一個證明這一點的程序。

但是,將整數文字用作字符值並不是一個好主意,因爲它掩蓋了程序的含義。 (也許這就是她在說的,你誤解她了。)

+0

是的,我寫了一個程序,證明了這一點,是的,我知道這是一個壞主意我不知道'e'+'a'等於什麼。不,我沒有誤解她。我今天跟她說過,她說你只能做'char x ='5''而不是'char x = 5',但我說服了她,否則 – Alex

1

char to int轉換被稱爲widening conversions。在擴大轉換時,值不會丟失有關數字值的整體大小的信息,因爲intchar轉換被稱爲narrowing conversions。通過縮小轉換範圍,您可能會丟失有關數值整體大小的信息,並且可能會失去精度。

有關原始轉換的更多信息refer此文檔。

+0

是的,我發現通過我們的一項練習 – Alex

0

「char」,「int」,「byte」,「short」或「long」都只是一些名字,用於保存串在一起的一堆東西。它們一起被稱爲integral types。同樣,所有這些都是Java知道如何表示爲一串位的字面值:0,'0',1,'0',-1,2147483647,'a','A',' 〜',...你得到的照片。我很確定你的問題,你已經知道0和'0'不是一回事。

任何我所列出的值,再加上其他類似的,可以分配給任何整型,但有時你必須迫使他們適應(如byte b = (byte) i,其中iint),你可能會失去當你強制它們時,組成這些值的一些位。

所以是的,你列出的所有操作都是有效的,因爲你只是以不同的方式組合不同的整數文字並將它們賦值爲整型。

P.S.如果你是Java的新手,不要試圖從「整體類型」鏈接中讀取太多內容,否則你的腦袋可能會崩潰。

0

正如其他人所說,什麼是合法,什麼是一個好主意,是不是總是相同的。

char ch = '0'; 
ch *= 1.1; 
// ch == '4' 

觀看無限循環

for(char ch = Character.MIN_VALUE; ch <= Character.MAX_VALUE; ch++) // infinite loop 

你可以用字符做的另一件事是值得懷疑的是從字節[]直接轉換爲String。

byte[] bytes = 
String text = new String(bytes, 0); 

這適用於ASCII-7文本,但不應該在一般情況下使用。