1 回答

TA貢獻(xiàn)15條經(jīng)驗(yàn) 獲得超13個(gè)贊
首先說一下"=="和"equal"的區(qū)別
對于基本類型的變量。"=="和"equal"的區(qū)別
"=="對于基本數(shù)據(jù)類型,判斷兩個(gè)變量的值是否相等。"equal"不能用于基本數(shù)據(jù)類型。只能用于類變量。對于基本數(shù)據(jù)類型要用其包裝類。
對于對象變量,"=="和"equal"的區(qū)別
因?yàn)閷ο笞兞康拇鎯Φ氖菍ο笤趦?nèi)存中的路徑,即內(nèi)存地址。所以用"=="比較時(shí),即使對象的值相等,但是他們的內(nèi)存地址不同,所以"=="的結(jié)果為false。故"=="用于比較兩個(gè)變量的值是否相等,而不是變量引用的對象是否相等。"equal"用于比較兩個(gè)對象是否相同。"=="比較的是值【變量(棧)內(nèi)存中存放的對象的(堆)內(nèi)存地址】?
"equal"用于比較兩個(gè)對象的值是否相同【不是比地址】
綜上所述:
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為什么地址也一樣呢?這是因?yàn)槌A砍氐木壒?,編譯期能確定相同的字符串才會指向常量池中同一個(gè)字符串。通常由常量來初始化的字符串在編譯期就能確定,所以它們的地址也一樣。而function3中的str,在編譯期是不能確定它的值,所以地址與s不一樣。
至于什么是常量池,你可以在網(wǎng)上看別人的博客,會比我這里一兩句話要好理解得多。
如果滿足要求,望采納!<(?????)>
添加回答
舉報(bào)