Java中char[] 和 String 類(lèi)型占用字節(jié)大小問(wèn)題
作者:威威喵 原文鏈接:https://blog.csdn.net/smile_Running/article/details/87211916
在 C 語(yǔ)言中
1、char a[10] = {"China"} 中,這個(gè) a 占用多少字節(jié)?
答:占用 10 個(gè)字節(jié)。
解析:上面代碼對(duì) a 做了賦值的操作,
a[0]='C' ,a[1]='h' ,a[2]='i' ,a[3]='n' ,a[4]='a' ,a[5]='\0',a[6]='\0',a[7]='\0',a[8]='\0',a[9]='\0'
所以,它占用的是 10 個(gè)字節(jié)。
2、如果單指 ”China“ ?
答:共 6 個(gè)字節(jié)。China 占 5 個(gè)字節(jié),最后以 '\0' 結(jié)束,占 1 個(gè)字節(jié)。
在 Java 語(yǔ)言中
1、String s = "China"; 占多少字節(jié)?
答:占 5 個(gè)字節(jié)。
System.out.println(Charset.defaultCharset());//獲取ide默認(rèn)編碼類(lèi)型
String s = new String("China".getBytes());
byte[] b = s.getBytes();
System.out.println("" + b.length);
以上代碼,可以輸出 "China" 所占的字節(jié)長(zhǎng)度為 5
2、String s = "中國(guó)"; 占多少字節(jié)?
答:如果是 漢字 的情況需要考慮編碼。
(1)GBK 編碼(ide默認(rèn))時(shí),每一個(gè)漢字占用 2 個(gè)字節(jié),那么中國(guó)占 4 個(gè)字節(jié)。
(2)UTF-8 編碼時(shí),每一個(gè)漢字占用 3 個(gè)字節(jié),那么中國(guó)占用 6 個(gè)字節(jié)。
3、轉(zhuǎn)碼問(wèn)題,GBK 轉(zhuǎn) UTF-8 時(shí),字節(jié)占用會(huì)變大嗎?反過(guò)來(lái)呢?
//獲取的是 UTF-8編碼
System.out.println(Charset.defaultCharset());
String s;
try {
s = new String("中國(guó)".getBytes(),"GBK");
byte[] b = s.getBytes();
System.out.println("" + b.length);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
如上代碼是:UTF-8 轉(zhuǎn) GBK 編碼格式,s 長(zhǎng)度從 6 字節(jié)變?yōu)?9 字節(jié)。
s 內(nèi)容變化:中國(guó) —> 涓浗
因?yàn)楫?dāng)前編碼是 UTF-8,轉(zhuǎn)碼之后變成了 3 個(gè)文字,占用 9 個(gè)字節(jié)。然而,反過(guò)來(lái)的情況是這樣的:
中國(guó) (gbk) —> ?й? (utf-8)
s 長(zhǎng)度從 4字節(jié) 變成了 4字節(jié),雖然長(zhǎng)度沒(méi)發(fā)生改變,但是文字已經(jīng)改變。這里的 ? 占用 1 個(gè)字節(jié)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Hibernatede 一對(duì)多映射配置方法(分享)
下面小編就為大家?guī)?lái)一篇Hibernatede 一對(duì)多映射配置方法(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
spring boot simple類(lèi)型cache使用詳解
這篇文章主要介紹了spring boot simple類(lèi)型cache使用,這里用的不是 redis 的緩存,simple 的緩存默認(rèn)用的是java的ConcurrentHashMap, 單純的simple緩存,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Java?RabbitMQ消息隊(duì)列詳解常見(jiàn)問(wèn)題
消息隊(duì)列是最古老的中間件之一,從系統(tǒng)之間有通信需求開(kāi)始,就自然產(chǎn)生了消息隊(duì)列。本文告訴什么是消息隊(duì)列,為什么需要消息隊(duì)列,常見(jiàn)的消息隊(duì)列有哪些,RabbitMQ的部署和使用2022-07-07
Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解
這篇文章主要介紹了Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例,較為詳細(xì)的分析了抽象工廠模式的定義、原理并結(jié)合實(shí)例形式分析了Java使用抽象工廠模式實(shí)現(xiàn)肯德基消費(fèi)案例的步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法
這篇文章主要介紹了玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java web Hibernate如何與數(shù)據(jù)庫(kù)鏈接
這篇文章主要介紹了Java web Hibernate如何與數(shù)據(jù)庫(kù)鏈接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
功能強(qiáng)大的TraceId?搭配?ELK使用詳解
這篇文章主要為大家介紹了功能強(qiáng)大的TraceId?搭配?ELK使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

