Java char所占用的字节_关于unicode:为什么Java char原语占用2个字节的内存?
有什么理由為什么Java char原始數據類型為2個字節而不像C為1個字節?
謝謝
簡短的答案是因為它們無聊:他們應該使用32位字符。
不,他們不應該使用32位寬的字符。 這將使開銷更大!
@ vy32:是的。 他們確實應該使用6位寬的字符。 這樣可以節省空間,而且畢竟大寫字母對于每個人都足夠。
如果要節省空間,每個字符5位就足夠了。 實際上,剩余的4個排列也可以使用-節省更多空間。
最初設計Java時,可以預期任何Unicode字符都可以容納2個字節(16位),因此char和Character是相應設計的。實際上,Unicode字符現在最多需要4個字節。因此,內部Java編碼UTF-16要求補充字符使用2個代碼單元。基本多語言平面中的字符(最常見的字符)仍使用1。每個代碼單元均使用Java char。 Sun的這篇文章很好地解釋了這一點。
我肯定Joel會喜歡"每個程序員都應該了解的字符編碼插件":joelonsoftware.com/articles/Unicode.html
Java中的char是UTF-16編碼的,每個字符至少需要16位存儲空間。
在Java中,字符使用UTF-16編碼,使用2個字節,而普通的C字符串或多或少只是一個字節。在設計C時,使用ASCII(僅覆蓋英語字符集)被認為是足夠的,而Java設計人員已經在考慮國際化。如果要對C字符串使用Unicode,則首選UTF-8編碼,因為它以ASCII作為子集,并且不使用0字節(與UTF-16不同),后者用作字符串的結尾C中的marker標記。在Java中不需要這樣的字符串結尾標記,因為此處的字符串是復雜類型,具有明確的長度。
在以前的語言中,使用了C ASCII表示法。
范圍是127,代表127個唯一符號和語言字符。
JAVA帶有一個稱為" INTERNATIONALIZATION"的功能,即所有人類可讀字符(包括區域符號)也已添加到其中,并且范圍也得到了擴大,因此需要更多的存儲空間,因此將所有這些符號統一的系統為"標準Unicode系統"等
該統一要求在JAVA中需要額外的字節。
第一個字節保持原樣,ASCII字符的范圍在C,C ++中為127,但是將統一字符附加到它們之后。
因此,JAVA中char為16位,C語言中為char 8位。
Java的?教程:
The char data type is a single 16-bit Unicode character. It has a minimum value of '\\u0000' (or 0) and a maximum value of '\\uffff' (or 65,535 inclusive).
Java被用作國際化語言,因此它以不同的語言工作,并且需要占用一個以上的字節,這就是為什么它在char中占用2byte的空間。
因為例如中文不能處理一個字節的字符。
我們知道c支持ASCII,其中java支持Unicode,其中包含3件事:
1-ASCII
2個擴展的ASCII
3種本地語言字符
ASCII是unicode的子集.ASCII僅支持英語,而Unicode支持跨國語言。否則,由于所有原因,java字符在UTF-16內編碼,使用2字節。由于Unicode是ASCII的擴展版本,所以它使用8位的16位。
總結
以上是生活随笔為你收集整理的Java char所占用的字节_关于unicode:为什么Java char原语占用2个字节的内存?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java程序二叉树_Java实现简单二叉
- 下一篇: java图遍历求最长路径_如何在Java