成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 中 String 字符串可以有多長(zhǎng)?65535?

開(kāi)發(fā) 后端
毫無(wú)疑問(wèn) String 是作為一個(gè) Java 開(kāi)發(fā)工程師天天都需要打交道的類,那么如果問(wèn)你 String 字符串的最大長(zhǎng)度是多少你知道嗎?

毫無(wú)疑問(wèn) String 是作為一個(gè) Java 開(kāi)發(fā)工程師天天都需要打交道的類,那么如果問(wèn)你 String 字符串的最大長(zhǎng)度是多少你知道嗎?

有的小伙伴可能想都沒(méi)想,就直接回答 65535,那么問(wèn)題來(lái)了,真的嗎?今天阿粉就帶你研究一下。

[[433670]]

首先對(duì)于 String 我們可以有下面幾種用法:

  • 定義一個(gè) String 類型的變量:private static final String STRING_TEST = "xxxxxxxxxxx"; 或者 String newString = "newString";
  • 通過(guò)在方法中定義 String 類型的變量,通過(guò)字節(jié)流創(chuàng)建字符串:byte[] bytes = new byte[length];String s = new String(bytes);;

有朋友可能會(huì)說(shuō),這兩種不都是定義一個(gè)字符串變量,有什么區(qū)別嗎?表面上看是沒(méi)什么區(qū)別,但是實(shí)際上區(qū)別還是蠻大的。

首先第一種方式定一個(gè)靜態(tài)類變量,或者普通的字符串變量,這種形式字符串是存放在棧中的;而第二種方式字符串是存放在堆中的。這個(gè)時(shí)候有的小伙伴又要問(wèn)了,這存在不同的地方有什么關(guān)系呢?首先這關(guān)系可大了!

當(dāng)字符串存放在棧中的時(shí)候,根據(jù) class 文件的結(jié)果規(guī)范,我們可以看到所采用的的存儲(chǔ)格式是這樣的:

  1. CONSTANT_Utf8_info { 
  2.       u1 tag; 
  3.       u2 length; 
  4.       u1 bytes[length]; 
  5.   } 

其中 u2 是一種類似于Java 中int 一樣的數(shù)據(jù)類型,只是表示的是一個(gè) 2 個(gè)字節(jié)的數(shù)據(jù)類型,只不過(guò) int 是 4 個(gè)字節(jié),這也就意味著允許的最大長(zhǎng)度為 65535 個(gè)字符。所以我們可以得出一個(gè)結(jié)果,當(dāng)字符串存放在棧內(nèi)存中的時(shí)候,字符串的長(zhǎng)度可以達(dá)到 65535。

看到這里小伙伴又不耐煩了,說(shuō)到:你看吧,我就說(shuō)是 65535 吧,還不信。

別急,到這里我們才說(shuō)了一半,接下來(lái)我們?cè)诳纯吹诙N方式。很顯然第二種方式不管是通過(guò)字節(jié)流的方式,還是 new 一個(gè)對(duì)象,存放的位置都是早 Java 的堆內(nèi)存中,而且通過(guò) String 的源碼,我們可以看到了,底層是通過(guò)一個(gè) char[] 數(shù)組來(lái)存放的。

  1. private final char value[]; 

那么我們就知道了,字符傳的大小就跟數(shù)組的長(zhǎng)度有直接關(guān)系了,另外在定義數(shù)組長(zhǎng)度的時(shí)候,我們最多只能定義 int 類型的最大值,也就是Integer.MAX_VALUE = 0x7fffffff; 而且 String 類的 length() 方法的返回值也可以看出來(lái),返回的類型是 int ,數(shù)值最大也是Integer.MAX_VALUE = 0x7fffffff;

  1. /** 
  2.      * Returns the length of this string. 
  3.      * The length is equal to the number of <a href="Character.html#unicode">Unicode 
  4.      * code units</a> in the string. 
  5.      * 
  6.      * @return  the length of the sequence of characters represented by this 
  7.      *          object. 
  8.      */ 
  9.     public int length() { 
  10.         return value.length; 
  11.     } 

所以看到這里,我們又得出了一個(gè)結(jié)果,**當(dāng)字符串存放在堆內(nèi)存的時(shí)候,最大的長(zhǎng)度為 Integer.MAX_VALUE = 0x7fffffff; **。不過(guò)需要注意的是,這個(gè)數(shù)值是理論上的,其實(shí)很多虛擬機(jī)會(huì)在數(shù)組中加入一些字符,所以實(shí)際的數(shù)值是達(dá)不到這么多,另外我們?cè)?ArrayList 中也可以看到這個(gè)驗(yàn)證,這里定義的最大值就是Integer.MAX_VALUE - 8; 而不直接采用最大值。

此外上面說(shuō)的最大值是在我們的虛擬機(jī)有這么大的內(nèi)存的前提下,如果說(shuō)我們的虛擬機(jī)配置的內(nèi)存比這個(gè)要小,那也是達(dá)不到這么大。我們可以通過(guò) JVM 參數(shù)來(lái)配置虛擬機(jī)的內(nèi)存大小,-Xms512m 設(shè)置堆內(nèi)存初始值大小。-Xmx1024m 設(shè)置堆內(nèi)存最大值。下面是阿粉在自己的電腦上測(cè)試的效果,可以看到,當(dāng)開(kāi)始提示Requested array size exceeds VM limit,后面因?yàn)榘⒎鄣碾娔X內(nèi)存不夠了,所以一直分配失敗,達(dá)不到最大值,只能降低長(zhǎng)度了。

另外還要注意一個(gè)點(diǎn),那就是我們?cè)谶@里說(shuō)的長(zhǎng)度針對(duì)的都是英文字符,如果是是中文的話是沒(méi)有那么長(zhǎng)的,那么如果對(duì)應(yīng)中文的話字符串會(huì)有多長(zhǎng)呢?

 

責(zé)任編輯:趙寧寧 來(lái)源: Java極客技術(shù)
相關(guān)推薦

2024-12-05 10:29:13

Rust字符串類型

2021-04-15 00:16:18

JavaString字符串

2024-03-05 18:29:54

JavaString字符串

2024-06-11 07:34:58

C#字符串性能

2021-02-19 22:38:49

Python 字符串數(shù)字

2011-06-08 15:45:41

字符串JAVA

2013-12-12 17:08:24

Lua字符串

2021-03-08 08:57:00

Go 字符串測(cè)試

2019-01-08 09:23:16

Java字符串編碼

2009-06-23 14:13:00

Java字符串

2019-12-17 15:49:44

Java語(yǔ)言字符串

2010-06-28 15:18:51

SQL Server

2021-05-27 08:59:09

String字符串操作

2024-10-08 09:32:08

算法題字符串函數(shù)

2015-06-09 14:43:36

javascript操作字符串

2021-03-08 08:23:24

Java字符串截取

2019-02-27 09:08:20

Java 8StringJoineIDEA

2021-03-11 18:44:39

字符串SQL表達(dá)式

2010-09-06 17:30:46

SQL函數(shù)

2009-02-24 14:27:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩精品一区二区三区四区 | 男女羞羞网站 | 久热中文字幕 | 91婷婷韩国欧美一区二区 | av黄色在线 | 国产二区视频 | 中文字幕精品一区二区三区精品 | 国产精品一区二区视频 | 亚洲成人精品 | 欧美激情欧美激情在线五月 | 日韩欧美在线免费观看视频 | 99久久精品免费视频 | 成人二区 | 午夜成人在线视频 | 精品电影 | 91成人在线视频 | 精品不卡 | 亚洲黄色av | 精品欧美乱码久久久久久1区2区 | 日韩精品免费视频 | 欧美精品久久久久 | 欧美精品一级 | 中文字幕电影在线观看 | 中文字幕视频三区 | 嫩草懂你的影院入口 | 超碰欧美| 91视频网址| 欧美日高清 | 欧美一级片在线看 | 欧美福利网站 | 午夜影院黄 | 小h片免费观看久久久久 | 天堂在线www | 精精国产视频 | 91精品国产综合久久婷婷香蕉 | 一区二区免费在线视频 | 欧美一区二区三区国产精品 | 国产成人精品免费视频大全最热 | 亚洲444eee在线观看 | 国产精品亚洲视频 | 欧美激情一区二区三区 |