2010-10-18 46 views
26

Java char原始數據類型是不是2字節,而不是C是1字節?爲什麼Java char原語佔用2個字節的內存?

由於

+4

簡短的回答是因爲他們愚蠢:他們應該使用32位字符。 – tchrist 2011-04-08 12:25:15

+0

不,他們不應該使用32位寬字符。這會讓頭頂更糟! – vy32 2011-07-04 04:13:58

+6

@ vy32:是的。他們應該使用[6位寬字符](https://en.wikipedia.org/wiki/Six-bit_character_code)。這將節省空間,畢竟大寫字母應該足夠每個人。 – 2012-07-15 03:41:37

回答

18

在Java中char是UTF-16編碼,這至少需要存儲對每個字符的16位。

44

在最初設計Java時,預計任何Unicode字符都適合2個字節(16位),因此設計了charCharacter。實際上,一個Unicode字符現在可能需要多達4個字節。因此,內部Java編碼UTF-16需要使用2個代碼單元的補充字符。基本多語言平面中的字符(最常見的)仍然使用1. Java char用於每個代碼單元。這Sun article解釋得很好。

+5

我確信Joel會欣賞「每個程序員應該知道字符編碼的插件:http://joelonsoftware.com/articles/Unicode.html – fooMonster 2011-11-10 14:56:42

9

在Java中,一個字符被編碼在其中UTF-16使用2個字節,而在正常的C字符串是或多或少只是一串字節。當設計C時,使用ASCII(僅涵蓋英文字符集)被認爲是足夠的,而Java設計者已經佔據了國際化的位置。如果你想使用Unicode和C字符串,UTF-8編碼是首選的方式,因爲它具有ASCII作爲子集,並且不使用0字節(不像UTF-16),它被用作字符串結束標記C.這樣的字符串結束標記在Java中不是必需的,因爲字符串在這裏是一個複雜的類型,具有明確的長度。

-1

的Java作爲國際化的話,它的工作在不同的語言,需要的空間多於一個字節,這就是爲什麼在字符空間對其採取2字節。 因爲例如中文不能處理字節的一個字節。

3

在像C ASCII以前的語言符號被使用。 而範圍是127,對於127 獨特符號語言字符

雖然JAVA提供了一個名爲「國際」特徵,也就是所有的人類可讀字符(包括區域符號)也被添加進去,和該範圍也增加,所以更多的存儲器需要系統統一所有這些符號是「Unicode標準體系」,並讓 這統一需要JAVA額外的字節。

第一字節保持原樣和ASCII字符範圍至127如C,C++,但統一字符比附加到他們。

所以在JAVA 16位爲炭和在C.

炭8位
-2

正如我們知道的C suppors ASCII其中如Java支持Unicode它含有3-事情是 1-ASCII 2擴展ASCII 3本地語言字符的ASCII 是unicode.ASCII的子集,僅支持其中爲Unicode支持跨國公司language.otherwise Java字符是UTF-16使用2 byte.for所有的原因,併爲統一內編碼英語是ASCII的擴展版本,所以它使用8位的16位。

0

Java™教程: char數據類型是一個單一的16位Unicode字符。它的最小值爲'\ u0000'(或0),最大值爲'\ uffff'(或65,535)。

相關問題