關于Java循環選擇語句while的問題:
換成*("yes")&&*("next")
解釋一下==號,他比較的是一個對象在內存中的地址值,
比如2個字符串對象
String s1 = new String("str");
String s2 = new String("str");
如果用==號比較,會返回false,因為創建了兩個對象,他們在內存中地址的位置是不一樣的。
equals的情況比較復雜,它是*類中的一個方法。因為java中所有的類都默認繼承于Object,所以所有的類都有這個方法。
在Object類源碼中是這樣寫的。
public boolean equals(Object obj) {
return (this == obj);
}
他同樣使用==號進行內存地址的比較。但是許多java類中都重寫了這個方法,比如String。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == *) {
char v1[] = value;
char v2[] = *;
int i = offset;
int j = *;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
String里的方法,如果==號比較不相等,還會進行一下值的比較。
所以equals方法具體的作用要看當前的那個類是如何實現重寫父類中該方法的。如果沒有重寫該方法,那么他和==號等價。