日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

String str=Hello 与 String str=new String(“Hello”)一样吗?

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String str=Hello 与 String str=new String(“Hello”)一样吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么會(huì)輸出上邊的結(jié)果呢,String x = "Hello" 的方式,Java 虛擬機(jī)會(huì)將其分配到常量池中,而常量池中沒(méi)有重復(fù)的元素,比如當(dāng)執(zhí)行“Hello”時(shí),java虛擬機(jī)會(huì)先在常量池中檢索是否已經(jīng)有“Hello”,如果有那么就將“代理”的地址賦給變量,如果沒(méi)有就創(chuàng)建一個(gè),然后在賦給變量;而 String z = new String(“Hello”) 則會(huì)被分到堆內(nèi)存中,即使內(nèi)容一樣還是會(huì)創(chuàng)建新的對(duì)象。

?

上面程序中的"==“是判斷兩個(gè)對(duì)象引用的地址是否相同,也就是判斷是否為同一個(gè)對(duì)象,a1與a2 返回為true,a1與a3返回則是false。說(shuō)明a1與a2引用的同一個(gè)對(duì)象的地址,a3則與其它兩個(gè)引用不是同一個(gè)對(duì)象地址。
Java為了避免產(chǎn)生大量的String對(duì)象,設(shè)計(jì)了一個(gè)字符串常量池。工作原理是這樣的,創(chuàng)建一個(gè)字符串時(shí),JVM首先為檢查字符串常量池中是否有值相等的字符串,如果有,則不再創(chuàng)建,直接返回該字符串的引用地址,若沒(méi)有,則創(chuàng)建,然后放到字符串常量池中,并返回新創(chuàng)建的字符串的引用地址。所以上面a1與a2引用地址相同。
那為什么a3與a1、a2引用的不是同一個(gè)字符串地址呢? String a3=new String(“代理Hello); JVM首先是在字符串常量池中找"Hello” 字符串,如果沒(méi)有創(chuàng)建字符串常量,然后放到常量池中,若已存在,則不需要?jiǎng)?chuàng)建;當(dāng)遇到 new 時(shí),還會(huì)在內(nèi)存(不是字符串常量池中,而是在堆里面)上創(chuàng)建一個(gè)新的String對(duì)象,存儲(chǔ)"Hello",并將內(nèi)存上的String對(duì)象引用地址返回,所以a3與a1、a2引用的不是同一個(gè)字符串地址。內(nèi)存結(jié)構(gòu)圖如下:

總結(jié)

以上是生活随笔為你收集整理的String str=Hello 与 String str=new String(“Hello”)一样吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。