==不是應(yīng)該表示同一嗎 同一的話是指地址相同 str1和str2顯然不是同一地址 為什么顯示true
String str1="hello";
String str2="hello";
System.out.println("str1等于str2:" + (str1 ==? str2));
String str1="hello";
String str2="hello";
System.out.println("str1等于str2:" + (str1 ==? str2));
2019-02-14
舉報(bào)
2019-05-26
==表示的是引用的內(nèi)存地址是否相同,而equals表示的是內(nèi)存里面的值是否相同
2019-02-14
==
在對(duì)于八大基本數(shù)據(jù)類型來(lái)說(shuō),用==是表示? ? ? 值等于
在對(duì)于引用數(shù)據(jù)類型來(lái)說(shuō),用==表示比較是不是同一個(gè)對(duì)象,即對(duì)象存在的堆空間地址是否相等
引用對(duì)象如果想要比較值是否相等,請(qǐng)用? equals()方法,這個(gè)是用于(基本數(shù)據(jù)類型的)值比較的方法
2019-02-14
對(duì)于字符串的聲明有兩種方式
1、使用常量池:即String? a = "aaaaa";
a存放在棧中,指向常量池中的aaaaa
(常量池中的值不存在相同的值)
若String b="aaaaa";就相當(dāng)于也指向常量池中的aaaaa
?。。。。。?!
變量a和b的第一手指向都是同一個(gè)值,在常量池中aaaaa只存在一個(gè),所以常量池地址唯一不會(huì)變,因此比較的其實(shí)是常量池同一個(gè)值得地址
a==b為true,這就是你想要的答案!?。。。。?!
2、使用堆空間:? ?即String? ?c=new String("aaaaa");
c變量名存放在棧空間,對(duì)象new String("aaaaa") 存放在堆空間,對(duì)象中的值aaaaa則是存在于常量池
變量c的第一手指向則為堆空間的地址,堆空間中new String("aaaaa") 可以有多個(gè),所以即便值相同的情況下,用new String()的方式創(chuàng)建的對(duì)象去比較 == 兩個(gè)對(duì)象的地址是不同的(堆or常量池)空間地址,所以
是堆空間地址的比較
若?String? d=new String("aaaaa");
c == d? 為false? ,盡管值都是aaaaa,但是堆空間地址不一樣,所以為false
a ==c? ? 為false? ,一個(gè)是常量池地址,一個(gè)是堆空間地址,不會(huì)相等 ,false
2019-02-14
你寫的不是兩個(gè)hello么,為什么不是true?
2019-02-14
== 是指值相同