卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

對象存儲在堆還是棧 String存放在堆中還是棧中?

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

String存放在堆中還是棧中?

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

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

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

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

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