亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java語言中一個(gè)字符占幾個(gè)字節(jié)?

 更新時(shí)間:2019年04月10日 16:14:04   作者:du_xian_sheng  
這篇文章主要介紹了Java語言中一個(gè)字符占幾個(gè)字節(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

題主要區(qū)分清楚內(nèi)碼(internal encoding)和外碼(external encoding)就好了。

內(nèi)碼是程序內(nèi)部使用的字符編碼,特別是某種語言實(shí)現(xiàn)其char或String類型在內(nèi)存里用的內(nèi)部編碼;
外碼是程序與外部交互時(shí)外部使用的字符編碼?!巴獠俊毕鄬?duì)“內(nèi)部”而言;不是char或String在內(nèi)存里用的內(nèi)部編碼的地方都可以認(rèn)為是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令行參數(shù)之類的。

Java語言規(guī)范規(guī)定,Java的char類型是UTF-16的code unit,也就是一定是16位(2字節(jié));

char, whose values are 16-bit unsigned integers representing UTF-16 code units (§3.1).

然后字符串是UTF-16 code unit的序列:

The Java programming language represents text in sequences of 16-bit code units, using the UTF-16 encoding.

這樣,Java規(guī)定了字符的內(nèi)碼要用UTF-16編碼?;蛘咧辽僖層脩魺o法感知到String內(nèi)部采用了非UTF-16的編碼。

另舉一例:

Java標(biāo)準(zhǔn)庫實(shí)現(xiàn)的對(duì)char與String的序列化規(guī)定使用UTF-8作為外碼。Java的Class文件中的字符串常量與符號(hào)名字也都規(guī)定用UTF-8編碼。這大概是當(dāng)時(shí)設(shè)計(jì)者為了平衡運(yùn)行時(shí)的時(shí)間效率(采用定長編碼的UTF-16)與外部存儲(chǔ)的空間效率(采用變長的UTF-8編碼)而做的取舍。

首先,你所謂的“字符”具體指什么呢?

如果你說的“字符”就是指 Java 中的 char,那好,那它就是 16 位,2 字節(jié)。

如果你說的“字符”是指我們用眼睛看到的那些“抽象的字符”,那么,談?wù)撍紟讉€(gè)字節(jié)是沒有意義的。

具體地講,脫離具體的編碼談某個(gè)字符占幾個(gè)字節(jié)是沒有意義的。

就好比有一個(gè)抽象的整數(shù)“42”,你說它占幾個(gè)字節(jié)?這得具體看你是用 byte,short,int,還是 long 來存它。用 byte 存就占一字節(jié),用 short 存就占兩字節(jié),int 通常是四字節(jié),long 通常八字節(jié)。當(dāng)然,如果你用 byte,受限于它有限的位數(shù),有些數(shù)它是存不了的,比如 256 就無法放在一個(gè) byte 里了。

字符是同樣的道理,如果你想談“占幾個(gè)字節(jié)”,就要先把編碼說清楚。

同一個(gè)字符在不同的編碼下可能占不同的字節(jié)。

就以你舉的“字”字為例,“字”在 GBK 編碼下占 2 字節(jié),在 UTF-16 編碼下也占 2 字節(jié),在 UTF-8 編碼下占 3 字節(jié),在 UTF-32 編碼下占 4 字節(jié)。

不同的字符在同一個(gè)編碼下也可能占不同的字節(jié)。

“字”在 UTF-8 編碼下占3字節(jié),而“A”在 UTF-8 編碼下占 1 字節(jié)。(因?yàn)?UTF-8 是變長編碼)
而 Java 中的 char 本質(zhì)上是 UTF-16 編碼。而 UTF-16 實(shí)際上也是一個(gè)變長編碼(2 字節(jié)或 4字節(jié))。

如果一個(gè)抽象的字符在 UTF-16 編碼下占 4 字節(jié),顯然它是不能放到 char 中的。換言之, char 中只能放 UTF-16 編碼下只占 2 字節(jié)的那些字符。

而 getBytes 實(shí)際是做編碼轉(zhuǎn)換,你應(yīng)該顯式傳入一個(gè)參數(shù)來指定編碼,否則它會(huì)使用缺省編碼來轉(zhuǎn)換。

你說“ new String("字").getBytes().length 返回的是3 ”,這說明缺省編碼是 UTF-8.如果你顯式地傳入一個(gè)參數(shù),比如這樣“ new String("字").getBytes("GBK").length ”,那么返回就是 2.

你可以在啟動(dòng) JVM 時(shí)設(shè)置一個(gè)缺省編碼,

假設(shè)你的類叫 Main,那么在命令行中用 java 執(zhí)行這個(gè)類時(shí)可以通過 file.encoding 參數(shù)設(shè)置一個(gè)缺省編碼。比如這樣:java -Dfile.encoding=GBK Main這時(shí),你再執(zhí)行不帶參數(shù)的 getBytes() 方法時(shí),new String("字").getBytes().length 返回的就是 2 了,因?yàn)楝F(xiàn)在缺省編碼變成 GBK 了。當(dāng)然,如果這時(shí)你顯式地指定編碼,new String("字").getBytes("UTF-8").length 返回的則依舊是 3

否則,會(huì)使用所在操作系統(tǒng)環(huán)境下的缺省編碼。

通常,Windows 系統(tǒng)下是 GBK,Linux 和 Mac 是 UTF-8.但有一點(diǎn)要注意,在 Windows 下使用 IDE 來運(yùn)行時(shí),比如 Eclipse,如果你的工程的缺省編碼是 UTF-8,在 IDE 中運(yùn)行你的程序時(shí),會(huì)加上上述的 -Dfile.encoding=UTF-8 參數(shù),這時(shí),即便你在 Windows 下,缺省編碼也是 UTF-8,而不是 GBK。

由于受啟動(dòng)參數(shù)及所在操作系統(tǒng)環(huán)境的影響,不帶參數(shù)的 getBytes 方法通常是不建議使用的,最好是顯式地指定參數(shù)以此獲得穩(wěn)定的預(yù)期行為。

以上所述是小編給大家介紹的Java語言中一個(gè)字符占幾個(gè)字節(jié)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • MyBatis-Plus+達(dá)夢數(shù)據(jù)庫實(shí)現(xiàn)高效數(shù)據(jù)持久化的示例

    MyBatis-Plus+達(dá)夢數(shù)據(jù)庫實(shí)現(xiàn)高效數(shù)據(jù)持久化的示例

    這篇文章主要介紹了MyBatis-Plus和達(dá)夢數(shù)據(jù)庫實(shí)現(xiàn)高效數(shù)據(jù)持久化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • mybatis使用pagehelper插件過程詳解

    mybatis使用pagehelper插件過程詳解

    這篇文章主要介紹了mybatis使用pagehelper插件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 深入淺出MyBatis映射器

    深入淺出MyBatis映射器

    映射器是MyBatis最復(fù)雜也最重要的組件,也是基于MyBatis應(yīng)用程序開發(fā)中,本文主要介紹了深入淺出MyBatis映射器,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解

    java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解

    本篇文章主要介紹了java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java源碼解析Integer方法解讀

    Java源碼解析Integer方法解讀

    這篇文章主要介紹了Java源碼解析Integer方法解讀,包括toString方法、toUnsignedString方法、highestOneBit方法等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 通過簡單方法實(shí)現(xiàn)spring boot web項(xiàng)目

    通過簡單方法實(shí)現(xiàn)spring boot web項(xiàng)目

    這篇文章主要介紹了通過簡單方法實(shí)現(xiàn)spring boot web項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • springboot臨時(shí)文件存儲(chǔ)目錄配置方式

    springboot臨時(shí)文件存儲(chǔ)目錄配置方式

    這篇文章主要介紹了springboot臨時(shí)文件存儲(chǔ)目錄配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring security登錄過程邏輯詳解

    Spring security登錄過程邏輯詳解

    這篇文章主要介紹了SSpringsecurity登錄過程邏輯詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringCloud-Hystrix實(shí)現(xiàn)原理總結(jié)

    SpringCloud-Hystrix實(shí)現(xiàn)原理總結(jié)

    通過hystrix可以解決雪崩效應(yīng)問題,它提供了資源隔離、降級(jí)機(jī)制、融斷、緩存等功能。接下來通過本文給大家分享SpringCloud-Hystrix實(shí)現(xiàn)原理,感興趣的朋友一起看看吧
    2021-05-05
  • IDEA如何實(shí)現(xiàn)查看UML類圖

    IDEA如何實(shí)現(xiàn)查看UML類圖

    這篇文章主要介紹了IDEA如何實(shí)現(xiàn)查看UML類圖問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論