2 回答

TA貢獻77條經(jīng)驗 獲得超201個贊
String?b=?new?String("as");
看見new 不管以前有沒有都會創(chuàng)建一個新的String 。
所以a == b是false。

TA貢獻22條經(jīng)驗 獲得超6個贊
很簡單 ?false
你要知道=和 new 是不一樣的
= 是將對象存在棧中(常量池?) 而new出來的對象是存放在堆中的
意思是無論你new多少個"as",就會創(chuàng)建多少個對象,
而=是當(dāng)你沒有"as"的時候才會創(chuàng)建,有了"as",就不會再創(chuàng)建又一個對象了,只是會讓那個引用變量指向那個對象
==比較對象的地址值。
你可以試一下String c=a;看看a和c是否相等.
String d=new String("as")看d和b是否相等驗證一下我的說法。

TA貢獻3593條經(jīng)驗 獲得超1個贊

TA貢獻6條經(jīng)驗 獲得超0個贊
public static void main(String [] args){
? String a=new String("as");
? String b=new String("as");
? System.out.println(a==b);//false:因為new出來的對象是放在堆中的 ?new出來的每個對象都有一個地址所以不同
?String d="ds";
? String c=d;
? System.out.println(d==c);//true ?:=賦值是放在常量池中得(棧)中 ?所以如果有相同內(nèi)容的字符串就不會再創(chuàng)建了,所以
? //d和c的指針指向了同一個地址
? d="as";
? System.out.println(a==d);
? ?}
添加回答
舉報