javastring位元組
㈠ java中String類型的數據分配多少位元組
Java中無論是漢字還是英文字母都是用Unicode編碼來表示的,一個Unicode碼是16位,每位元組是8位,所以一個Unicode碼占兩位元組。但是英文字母比較特殊,源自於8位(1位元組)的ASCII嗎,於是在Unicode碼僅使用了低8位(1位元組)就可以表示,高8位的話不使用也無所謂。所以
char
c='a';
System.out.println(c.getBytes().lenth()),得到的是1(位元組)
但漢字就完整地使用了16位(2位元組)的Unicode,所以
char
c='中';
System.out.println(c.getBytes().lenth()),得到的是2(位元組)
綜上,c='a'在內存中確實只佔1位元組,但這不意味著String
s="abc"在內存中只佔3位元組。應該這么說,String
s="abc"至少在內存中佔3位元組。這是因為char是基本數據類型,而String確是對象類型。
㈡ Java中String類型有沒有長度的限制
嚴格來說,String確實有長度限制。
1、String內部使用一個char[]數組來存放字元串的內容,數組下標是整型(也可以參考String的構造方法String(char value[], int offset, int count) ,可以知道字元數量是用整型表示),整型(Java規定32位)表示範圍是2G,也就是說,Java數組最大的長度是2G,即字元串不能超過2G個字元。
2、Java的數組大小還有沒有別的限制?事實上數組大小不能超過Java堆的大小,而Java堆的最大尺寸可以通過啟動參數指定,如果Java堆開得足夠大,數組的最大長度是可以不斷增大的。
3、所以,理論上,字元串不能超過2G個字元,少於2G個字元都有可能。
㈢ java關於String[] str = new String[]{};
大括弧的作用是初始化。
String[]str = new String[]{};
大括弧的意思是初始化,前面定義的String[]str ;
但是現在大括弧裡面是空的,也就是沒有內容,列印str的長度是0,但是如果這樣定義String[]str = new String[]{「111」,"22222"};str的長度就為2。
String類有個構造方法 String(byte ascii[],int hiByte);此方法是以位元組數組的形式生成一個字元串,數組中存放字元申各字元對應的ASCII碼。
為了和使用 1~3位元組表示一個代碼的 UTF(Unicode Text Format)兼容,這個構造方法的入口參數中用hiByte指出每個代碼含幾個高位位元組。對於ASCII碼而言,因為只有1個位元組,而沒有高位位元組,所以,hiByte的值為0,但對其他字元,hiByte的值可能為1或2。
(3)javastring位元組擴展閱讀:
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼;
存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用。
㈣ java中String占幾個位元組
Java中無論是漢字還是英文字母都是用Unicode編碼來表示的,一個Unicode碼是16位,每位元組是8位,所以一個Unicode碼占兩位元組。但是英文字母比較特殊,源自於8位(1位元組)的ASCII嗎,於是在Unicode碼僅使用了低8位(1位元組)就可以表示,高8位的話不使用也無所謂。所以
char
c='a';
System.out.println(c.getBytes().lenth()),得到的是1(位元組)
但漢字就完整地使用了16位(2位元組)的Unicode,所以
char
c='中';
System.out.println(c.getBytes().lenth()),得到的是2(位元組)
綜上,c='a'在內存中確實只佔1位元組,但這不意味著String
s="abc"在內存中只佔3位元組。應該這么說,String
s="abc"至少在內存中佔3位元組。這是因為char是基本數據類型,而String確是對象類型。
㈤ Java語言中的String類跟byte、short、long、int、float、double、char、boolean等八大數據類型有啥不同
String屬於引用數據類型,這就是Java提供的字元串類,內部封裝了很多方法(函數),簡潔又安全
那八種屬於基礎數據類型;這八種也有對應的引用數據類型
int對應Integer
char對應Character
其他都是首字母大寫
例如long對應Long
引用類型是將基礎數據類型進行封裝,提供更豐富的功能
㈥ (java)如何獲取字元串的位元組數!
字元串是可以轉變成位元組數組,然後統計一下位元組數組的長度即可,參考如下代碼:
Java語言中,中文字元所佔的位元組數取決於字元的編碼方式,一般情況下,採用ISO8859-1編碼方式時,一個中文字元與一個英文字元一樣只佔1個位元組;採用GB2312或GBK編碼方式時,一個中文字元佔2個位元組;而採用UTF-8編碼方式時,一個中文字元會佔3個位元組。
public static void main(String []args) throws UnsupportedEncodingException {
// 運行結果:2
System.out.println("測試".getBytes("ISO8859-1").length);
// 運行結果:4
System.out.println("測試".getBytes("GB2312").length);
// 運行結果:4
System.out.println("測試".getBytes("GBK").length);
// 運行結果:6
System.out.println("測試".getBytes("UTF-8").length);
}
㈦ Java中String接受的最大字元串的長度是多少
我們可以使用串接操作符得到一個長度更長的字元串,那麼,string對象最多能容納多少字元呢?查看string的源代碼我們可以得知類string中
是使用域
count
來記錄對象字元的數量,而count
的類型為
int,因此,我們可以推測最長的長度為
2^32,也就是4g。
不過,我們在編寫源代碼的時候,如果使用
sting
str
=
"aaaa";的形式定義一個字元串,那麼雙引號裡面的ascii字元最多隻能
有
65534
個。為什麼呢?因為在class文件的規范中,
constant_utf8_info表中使用一個16位的無符號整數來記錄字元串的長
度的,最多能表示
65536個位元組,而java
class
文件是使用一種變體utf-8格式來存放字元的,null值使用兩個位元組來表示,因此只剩
下
65536-
2
=
65534個位元組。也正是變體utf-8的原因,如果字元串中含有中文等非ascii字元,那麼雙引號中字元的數量會更少(一
個中文字元佔用三個位元組)。如果超出這個數量,在編譯的時候編譯器會報錯