2014-08-31 61 views
1

我對學校的分配和管理的任務之一就是Java的給你它給你的輸出解釋了很多微小的計算和解釋..與char變量計算的Java

和一個計算是:

1 +「2」 + 3

這對我給出了一個詞法錯誤,因爲老師用我的系統錯誤「撇」,但我已經說過了其他同學和他們告訴我他們得到了一個實際的輸出,所以我開始閱讀它,並發現它應該表示一個字符變量,並且我還發現了系統m的具體類型,所以我改變了跡象,爲我的系統工作,現在我得到的答案 ..

我看不到它的邏輯,我試圖谷歌添加/計算/數學與char變量,並沒有發現任何解釋它..

所以我轉向你,編碼的人,我有一天可能是幫助我瞭解這個邏輯的一部分..

這開始是作爲一項家庭作業的作業,我可能可以通過只回答它給出了一個詞法錯誤,因爲我的編譯器不理解符號,但現在它達到了我的古怪ity,我真的想知道java如何設法得到這個答案..

謝謝你對這件事的任何幫助! :)

我可以看到,我不能讓一個「功課」的標籤,所以我希望這沒關係,我把它放在這裏:)

+0

http://stackoverflow.com/questions/3680625/integer-arithmetic-in-java-with-char-and-integer-literal – assylias 2014-08-31 14:48:15

+0

[Converting int to char in java](http:// stackoverflow 。com/questions/833709/convert-int-char-in-java) – Dici 2014-08-31 14:48:34

+1

當您將較寬的類型添加到窄類型時,您會得到更寬的類型。 '1'是一個'int'並且比'char'更寬,所以你應該期望得到一個'int'結果。 – 2014-08-31 14:58:17

回答

2

在Java中,char■找一個直接映射到int小號UTF-16。不過,對於大多數常見字符,將char值轉換爲int會在ascii表上產生其索引。 +不是對字符的操作,但它是一個整數操作。因此,java正在考慮2,並且在思考「我不能添加這個」之後,意識到如果它將其轉換爲int,它可以添加它。 Ascii Table

正如你可以看到表中, '2' 具有50索引,從而1 + 50 + 3 = 54

+0

這個!哈哈,所以這就是爲什麼! 非常感謝,這解釋得非常好! 這意味着我今晚會睡得很好..再次感謝你! – 2014-08-31 15:19:13

+0

沒問題!儘可能接受答案! – Mshnik 2014-08-31 15:23:34

+0

** Java使用Unicode而非ASCII!**在字符串和字符中,它使用一種名爲UTF-16的Unicode編碼。 char是一個UTF-16代碼單元,其中一個或兩個代碼單元保存代碼點的值,該代碼點是標識字符集中的字符的數字。按照設計,Unicode是ASCII的超集,並且對通用字符使用相同的碼點。 Character類告訴一個代碼單元是一個完整的代碼點還是一對完整的代碼點之一。 – 2014-08-31 15:36:35

0

字符是,事實上,數字。計算機使用字符集(字符集)將字符轉換爲整數。字符集是將指定字符綁定到指定整數的表,因此您的計算機可以將其轉換爲二進制文件並將其存儲在內存中。稍後當需要時,該號碼可以變回字符。您的編譯器使用Unicode(謝謝Tom Blodget),所以字符'2'實際上是十進制整數50(更多信息:http://unicode-table.com/en/,注意表使用十六進制數字,所以十六進制32是十進制50)。由於添加默認返回一個整數,字符被轉換和添加,但從未實際轉換回原始形式。

至於爲什麼它給出錯誤,這可能是因爲Java在類型和編譯器(或任何拋出錯誤)之間有所不同,因此更嚴格。不要拿我的話,你應該看看標準和你的實施。例如,在C中,這種添加總是會成功的。

希望它清除了一些東西。

+0

**編譯器不使用ASCII。**請參閱我的評論[答案](http://stackoverflow.com/a/25593119/2226988)。 – 2014-08-31 15:37:29

+0

忘了這一點,謝謝(我用我的母語寫應用程序的輸出字符串,它使用幾個非ASCII字符)。更正了答案。 – Luke 2014-08-31 15:45:34