if(sex.equals("女")),這一句是為什么呀,equals是干嘛的呀?

未完記憶
2015-11-17
2 回答
舉報(bào)
0/150
提交
取消
2015-11-17
判斷是否相等,當(dāng)判斷基本數(shù)據(jù)類型的時(shí)候和==一樣,當(dāng)判斷引用類型的值的時(shí)候,==和Equals都是比較棧內(nèi)存中的地址是否相等。
1、string是一個(gè)特殊的引用類型。對(duì)于兩個(gè)字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同;
2、當(dāng)你創(chuàng)建兩個(gè)string對(duì)象時(shí),內(nèi)存中的地址是不相同的,你可以賦相同的值。
所以字符串的內(nèi)容相同。引用地址不一定相同,(相同內(nèi)容的對(duì)象地址不一定相同),但反過(guò)來(lái)卻是肯定的;
3、基本數(shù)據(jù)類型比較(string 除外) == 和 Equals 兩者都是比較值;
2015-11-18
看一下 String中重寫(xiě)Object的equals源碼
public boolean equals(Object anObject) {
? ? if (this == anObject) {
? ? ? ? return true;
? ? }
? ? if (anObject instanceof String) {
? ? ? ? String anotherString = (String)anObject;
? ? ? ? int n = count;
? ? ? ? if (n == anotherString.count) {
? ? ? ? char v1[] = value;
? ? ? ? char v2[] = anotherString.value;
? ? ? ? int i = offset;
? ? ? ? int j = anotherString.offset;
? ? ? ? while (n-- != 0) {
? ? ? ? ? ? if (v1[i++] != v2[j++])
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? ? ? }
? ? }
? ? return false;
? ? }
object類的equals()方法,判斷調(diào)用該方法的對(duì)象與要比較的對(duì)象是不是同一個(gè)對(duì)象(判斷地址),而String類中的equals()方法,則判斷當(dāng)前字符串與傳遞進(jìn)來(lái)的字符串的內(nèi)容是否一致。
針對(duì)樓上說(shuō)的第二問(wèn),你忽略的常量池技術(shù):
以下兩種創(chuàng)建String對(duì)象方式
String a="1";
String b="1";
System.out.println(a==b);結(jié)果true,a和b指向常量池中同一個(gè)內(nèi)存空間?
String a1=new String("2");
String b1=new String("2");
System.out.println(a1==b1);結(jié)果false,a1和b1分別位于堆中不同的內(nèi)存空間