今天長沙達內(nèi)教育培訓(xùn)機構(gòu)小編為大家介紹“java中string創(chuàng)建對象的方式有哪幾種”,希望大家看完此文,能夠熟悉string創(chuàng)建對象的方式,下面就隨小編一起看看java中string創(chuàng)建對象的方式分別是哪些。
Java中String是一個特殊的包裝類數(shù)據(jù)有兩種創(chuàng)建方式:
String s = "abc";
String s = new String("abc");
第一種先在棧中創(chuàng)建一個對String類的對象引用變量s,然后去查找"abc"是否被保存在字符串常量池中,如果沒有則在棧中創(chuàng)建三個char型的值'a'、'b'、'c',然后在堆中創(chuàng)建一個String對象object,它的值是剛才在棧中創(chuàng)建的三個char型值組成的數(shù)組{'a'、'b'、'c'},接著這個String對象object被存放進字符串常量池,最后將s指向這個對象的地址,如果"abc"已經(jīng)被保存在字符串常量池中,則在字符串常量池中找到值為"abc"的對象object,然后將s指向這個對象的地址。
第一種特點:JVM會自動根據(jù)棧中數(shù)據(jù)的實際情況來決定是否有必要創(chuàng)建新對象。
第二種可以分解成兩步:
1、String object = "abc";
2、String s = new String(object);
第一步參考第一種創(chuàng)建方式,而第二步由于"abc"已經(jīng)被創(chuàng)建并保存到字符串常量池中,因此jvm只會在堆中新創(chuàng)建一個String對象,它的值共享棧中已有的三個char型值。
第二種特點:一概在堆中創(chuàng)建新對象,而不管其字符串值是否相等,是否有必要創(chuàng)建新對象。
在講字符串比較前,必須要了解==和equals的區(qū)別:
因為java所有類都繼承于Object基類,而Object中equals用==來實現(xiàn),所以equals和==是一樣的,都是比較對象地址,java api里的類大部分都重寫了equals方法,包括基本數(shù)據(jù)類型的封裝類、String類等。對于String類==用于比較兩個String對象的地址,equals則用于比較兩個String對象的內(nèi)容(值)。
以上就是長沙達內(nèi)教育java培訓(xùn)機構(gòu)小編介紹的“java中string創(chuàng)建對象的方式分別是哪些”的內(nèi)容,希望對大家有幫助,更多java資訊最新內(nèi)容請繼續(xù)關(guān)注長沙達內(nèi)教育java培訓(xùn)機構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。
相關(guān)免費視頻教程推薦
Javase基礎(chǔ)教程視頻下載——String對象的創(chuàng)建:http://www.bjpowernode.com/xiazai/2526.html