將回文轉換為一個字符串後,反轉此字符串,比較這兩個字符串卻不想等,求問什麼?
String number1 = String.valueOf(number);
String number2 = new StringBuffer(number1).reverse().toString();
boolean answer = (number1 == number2 ) ? true : false ;
System.out.print(answer);
return answer ;
找到答案了;
總體來說java中字符串的比較是==比較引用,equals 比較值的做法。(equals 對於其他引用類型比較的是地址,這是因為object的equals方法比較的是引用),但是不同的聲明方法字符串的比較結果也是不同的。
例如: String str1=new String("a");
String str2=new String("a");
str1==str2 輸出false
str1.equals(str2) 輸出true
而如果這樣聲明
String str1="a";
String str2="a";
str1==str2 輸出true
str1.equals(str2) 輸出true
這是因為 equals 方法本來也是比較引用的 字符串類在實現的時候重寫了該方法, 第一種聲明方法等於是聲明了兩個對象,用’==‘比較是時候比較的是引用輸出的是false 由於他們的值相同用equals的時候就比較的是值了,輸出true。
而第二種情況不是因為比較有與第一種有差異,而是因為聲明有差異,第二種聲明方法在聲明的時候有堆或堆棧 共用的現象,也就是說 在聲明的時候如果如果聲明為類屬性他會檢查在堆棧中有沒有與現在聲明的是相同結構的字符串。如果有就直接將地址指向已有內存地址。聲明在方法內部的局部變量原理一樣只不過他是堆棧共享。