//求解,那個false是為什么,難道不是比較的值嗎?public class Tese { public static void main(String[] args) { boolean a=function_1(); boolean b=function_2(); boolean c=function_3(); boolean d=function_4(); //結果都是true System.out.println(a); System.out.println(b); //反轉后結果應該是一樣的,然后用==和equals得出兩種結果,一個false ?一個true System.out.println(c); System.out.println(d); } public static boolean function_1(){ String a="a"; String b="a"; return a==b; } public static boolean function_2(){ String a="a"; String b="a"; return a.equals(b); } public static boolean function_3(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s==str; } public static boolean function_4(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s.equals(str); }}
1 回答
已采納

天將明96
TA貢獻15條經驗 獲得超13個贊
首先說一下"=="和"equal"的區別
對于基本類型的變量。"=="和"equal"的區別
"=="對于基本數據類型,判斷兩個變量的值是否相等。"equal"不能用于基本數據類型。只能用于類變量。對于基本數據類型要用其包裝類。
對于對象變量,"=="和"equal"的區別
因為對象變量的存儲的是對象在內存中的路徑,即內存地址。所以用"=="比較時,即使對象的值相等,但是他們的內存地址不同,所以"=="的結果為false。故"=="用于比較兩個變量的值是否相等,而不是變量引用的對象是否相等。"equal"用于比較兩個對象是否相同。"=="比較的是值【變量(棧)內存中存放的對象的(堆)內存地址】?
"equal"用于比較兩個對象的值是否相同【不是比地址】
綜上所述:
String?s="123321"; StringBuilder?sb=new?StringBuilder(s); String?str=sb.reverse().toString();
s和str有相同的值,但是它們的地址是不同的,所以s==str為false,s.equals(str)為true。
那你可能會問
String?a="a"; String?b="a";
這里的a和b為什么地址也一樣呢?這是因為常量池的緣故,編譯期能確定相同的字符串才會指向常量池中同一個字符串。通常由常量來初始化的字符串在編譯期就能確定,所以它們的地址也一樣。而function3中的str,在編譯期是不能確定它的值,所以地址與s不一樣。
至于什么是常量池,你可以在網上看別人的博客,會比我這里一兩句話要好理解得多。
如果滿足要求,望采納!<(?????)>
點擊展開后面2條
添加回答
舉報
0/150
提交
取消