国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

對(duì)象存儲(chǔ)在堆還是棧 String存放在堆中還是棧中?

String存放在堆中還是棧中?問(wèn)題中的String指的應(yīng)該是java中的String吧。這里給出的回答針對(duì)java。String是一個(gè)不可變的對(duì)象,在java中只能作為常量使用。java代碼中所有的

String存放在堆中還是棧中?

問(wèn)題中的String指的應(yīng)該是java中的String吧。這里給出的回答針對(duì)java。

String是一個(gè)不可變的對(duì)象,在java中只能作為常量使用。java代碼中所有的顯式字符串,即直接寫(xiě)出的那種字符串,例如"abc"都是String對(duì)象。String本身作為一個(gè)對(duì)象,必然是在堆上的,而String中的內(nèi)容char[] value 則是放在堆中的一個(gè)特殊區(qū)域中——常量區(qū)。

所以String本身是放在堆上,而根據(jù)垃圾回收情況,又可以分為新生代和老年代。如果這個(gè)String對(duì)象剛創(chuàng)建不久,則它一般位于堆的新生代,如果它創(chuàng)建之后存在了很長(zhǎng)時(shí)間,則它很可能處于堆中的老年代。注意,String中的字符串內(nèi)容即字符數(shù)組value則位于堆中的常量區(qū)。

如果你先有一個(gè)字符數(shù)組,例如char[] arr { "a", "b", "c" },然后調(diào)用String s = new String(arr)創(chuàng)建的String,則字符數(shù)組不再是位于常量區(qū),而是跟其他對(duì)象一樣,位于堆上。注意,即使這個(gè)arr數(shù)組是在棧上分配的,這樣創(chuàng)建的String中的value依然是在堆上。如果你想把這個(gè)字符串放進(jìn)常量區(qū),可以調(diào)用String.intern。

棧上不會(huì)有對(duì)象,只會(huì)有基本變量和引用變量,所以String只可能位于堆上,不可能位于棧上。