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

未完記憶
2015-11-17
2 回答
舉報
0/150
提交
取消
2015-11-17
判斷是否相等,當判斷基本數據類型的時候和==一樣,當判斷引用類型的值的時候,==和Equals都是比較棧內存中的地址是否相等。
1、string是一個特殊的引用類型。對于兩個字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同;
2、當你創建兩個string對象時,內存中的地址是不相同的,你可以賦相同的值。
所以字符串的內容相同。引用地址不一定相同,(相同內容的對象地址不一定相同),但反過來卻是肯定的;
3、基本數據類型比較(string 除外) == 和 Equals 兩者都是比較值;
2015-11-18
看一下 String中重寫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()方法,判斷調用該方法的對象與要比較的對象是不是同一個對象(判斷地址),而String類中的equals()方法,則判斷當前字符串與傳遞進來的字符串的內容是否一致。
針對樓上說的第二問,你忽略的常量池技術:
以下兩種創建String對象方式
String a="1";
String b="1";
System.out.println(a==b);結果true,a和b指向常量池中同一個內存空間?
String a1=new String("2");
String b1=new String("2");
System.out.println(a1==b1);結果false,a1和b1分別位于堆中不同的內存空間