== 比較的是變數(棧)記憶體中存放的物件的(堆)記憶體位址,用來判斷兩個物件的位址是否相同,即是否是指相同乙個物件。比較的是真正意義上的指標操作。
1、比較的是操作符兩端的運算元是否是同乙個物件。
2、兩邊的運算元必須是同一型別的(可以是父子類之間)才能編譯通過。
3、比較的是位址,如果是具體的阿拉伯數字的比較,值相等則為true,如:
int a=10 與 long b=10l 與 double c=10.0都是相同的(為true),因為他們都指向位址為10的堆。
equals用來比較的是兩個物件的內容是否相等,由於所有的類都是繼承自j**a.lang.object類的,所以適用於所有物件,如果沒有對該方法進行覆蓋的話,呼叫的仍然是object類中的方法,而object中的equals方法返回的卻是==的判斷。
string s="abce"是一種非常特殊的形式,和new 有本質的區別。它是j**a中唯一不需要new 就可以產生物件的途徑。以string s="abce";形式賦值在j**a中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中。這種形式的字串,在jvm內部發生字串拘留,即當宣告這樣的乙個字串後,jvm會在常量池中先查詢有有沒有乙個值為"abcd"的物件,如果有,就會把它賦給當前引用.即原來那個引用和現在這個引用指點向了同一物件,如果沒有,則在常量池中新建立乙個"abcd",下一次如果有string s1 = "abcd";又會將s1指向"abcd"這個物件,即以這形式宣告的字串,只要值相等,任何多個引用都指向同一物件.
而string s = new string("abcd");和其它任何物件一樣.每呼叫一次就產生乙個物件,只要它們呼叫。
也可以這麼理解: string str = "hello"; 先在記憶體中找是不是有"hello"這個物件,如果有,就讓str指向那個"hello".如果記憶體裡沒有"hello",就建立乙個新的物件儲存"hello". string str=new string ("hello") 就是不管記憶體裡是不是已經有"hello"這個物件,都新建乙個物件儲存"hello"。
具體可以看下面的**:
[](j**ascript:void(0)
與equals的區別
注意 當比較兩個基本資料型別的變數是否相等時 基本資料型別包括 byte short int long float double 當它們的值相同時,則 結果就為true eg public class class6 1 public static void main string args stri...
與equals的區別
public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...
與 equals的區別
與equals都是比較兩個變數得到true或false。在進行比較時,先說說記憶體,記憶體分為堆和棧。基本資料型別中,是把值存在棧中,把值傳遞給變數,這種傳遞叫值傳遞。引用資料型別中,是在棧中存位址,堆中存的new的物件,給變數賦值傳遞時,傳的是位址,這種傳遞叫引用傳遞。基本資料型別 int a 1...