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

字符串常量池在堆中還是方法區(qū) 字符串常量池到底存放的是字符串引用還是字符串對(duì)象?

字符串常量池到底存放的是字符串引用還是字符串對(duì)象?你看看String源碼就明白了,是對(duì)象!s="123"寫這句話的時(shí)候,會(huì)在常量池先找有沒有123這個(gè)字符串對(duì)象如果沒有,他就開始抽取,1,2,3然后拼

字符串常量池到底存放的是字符串引用還是字符串對(duì)象?

你看看String源碼就明白了,是對(duì)象!

s="123"

寫這句話的時(shí)候,會(huì)在常量池先找有沒有123這個(gè)字符串對(duì)象如果沒有,他就開始抽取,1,2,3

然后拼接成一個(gè)對(duì)象即:"123"

假如后面又來一個(gè)也需要這個(gè)對(duì)象,比如說s1="123"

這個(gè)時(shí)候在操作s1的時(shí)候還是先去常量池找有沒有這個(gè)對(duì)象,如果有,直接把地址拿過來,因?yàn)槌A砍財(cái)?shù)據(jù)為共享的,

假如這個(gè)時(shí)候s1="1234"那么常量池是沒有的,就會(huì)重新抽取,1,2,3,4,然后重新拼接成一個(gè)新的對(duì)象放在常量池!

String源碼里面有一個(gè)私有變量一個(gè)字符類型的數(shù)組,他就是用來抽取這些單個(gè)字符,然后拼接成

一個(gè)字符串對(duì)象!

字符串常量池是在方法區(qū)中還是在獨(dú)立的區(qū)域中?

String str = "nihao" 程序開始執(zhí)行這句代碼,肯定是要?jiǎng)?chuàng)建一個(gè)對(duì)象的, 只是這個(gè)對(duì)象創(chuàng)建后就是一個(gè)常量,不可以更改, 并且這個(gè)對(duì)象是放在串池里面的,也就是你說的那個(gè)常量池

如果我后面在寫一句代碼: String other = "nihao"

str和other這2個(gè)引用的地址就是一樣的, 因?yàn)閟tr和other的聲明方式是一樣的, 都是在串池, str的對(duì)象創(chuàng)建時(shí),串池中沒有"nihao"這個(gè)常量,就創(chuàng)建一個(gè). other對(duì)象創(chuàng)建時(shí),發(fā)現(xiàn)串池中已經(jīng)有了"nihao"這個(gè)常量, 就直接拿過來用就是了

String a1 = new String("nihao")

String b1 = new String("nihao")

但是如果我們通過上面的方式直接new String() 那個(gè)a1和b1這2個(gè)引用的對(duì)象就不是在串池中了,而是在堆中, 但是new String() 的參數(shù)"nihao"也是一個(gè)字符串啊, 這個(gè)字符串從哪里來呢?如果我們吧代碼拆分一下就明白了:

String para = "nihao"

String a1 = new String(para)

就會(huì)發(fā)現(xiàn)String a1 = new String("nihao") 這一句代碼實(shí)際上創(chuàng)建了2個(gè)對(duì)象, 一個(gè)是String對(duì)象,存放在堆中, 一個(gè)是字符串常量對(duì)象,存放在串池中

字符常量池是什么意思?

可以理解為內(nèi)存里面專門為string類型變量開辟的一片區(qū)域譬如String a = "abc" 當(dāng)你定義這樣一個(gè)變量的時(shí)候,java此時(shí)先會(huì)去常量池尋找有沒有"abc"這樣的字符串,如果有,直接把內(nèi)存地址交給a, 否則就生成一個(gè)"abc"的字符串當(dāng)下一個(gè)String b = "abc"的時(shí)候,發(fā)現(xiàn)常量池已經(jīng)有"abc"了,此時(shí)JVM不會(huì)再次生成"abc",而是直接交給"abc"引用給b, 所以此時(shí)你會(huì)發(fā)現(xiàn)a == b

Java中的字符串常量池與Java中的堆和棧的區(qū)別?

java常量池不在堆中也不在棧中,是獨(dú)立的內(nèi)存空間管理。

 1. 棧:存放基本類型的變量數(shù)據(jù)和對(duì)象的引用,但對(duì)象本身不存放在棧中,而是存放在堆(new 出來的對(duì)象)或者常量池中(字符串常量對(duì)象存放在常量池中。)

 2. 堆:存放所有new出來的對(duì)象。

 3. 常量池:存放字符串常量和基本類型常量(public static final)。

對(duì)于字符串:其對(duì)象的引用都是存儲(chǔ)在棧中的,如果是編譯期已經(jīng)創(chuàng)建好(直接用雙引號(hào)定義的)的就存儲(chǔ)在常量池中,如果是運(yùn)行期(new出來的)才能確定的就存儲(chǔ)在堆中。對(duì)于equals相等的字符串,在常量池中永遠(yuǎn)只有一份,在堆中有多份。