1. 程式人生 > >equals方法與==到底有什麼區別

equals方法與==到底有什麼區別

==:是一個比較運算子,用來判斷兩個變數是否相等即兩個物件在記憶體中的首地址是否相同。

equals ():是Object類提供的一個例項方法也就是說每個類都含有這個方法,如果不對其重寫。它的作用是和==是一樣的

如果不對其重寫。

下面看個例子

package com.iss.test;


public class Test {

public static void main(String[] args) {

String s1, s2, s3 = "abc", s4 = "abc";

s1 = new String("abc");
s2 = new String("abc");

System.out.println(s3 == s4);// 結果為true這是因為在字串池中如果已經有相同的字串,就會將值直接賦給引用,因此它們指向的同一個物件
System.out.println(s1 == s2);// 結果為false這是因為它們的記憶體地址不一樣,指向的物件不一樣
System.out.println(s1.equals(s2));// 結果為true。為什麼呢不是說它和==的作用是一樣的嗎?原因在於它把從Object繼承而來的equals方法重寫只要保證內容相同就返回true

// 但是在Stringbuilder中就沒有對equals()進行重寫所以結果為false;
StringBuilder builder = new StringBuilder("abc");
StringBuilder builder2 = new StringBuilder("abc");

System.out.println(builder.equals(builder2));

// 變為String型別就會相等了可見String對equals()進行了重寫
System.out.println(builder.toString().equals(builder2.toString()));

}
}

Object 中預設的equals()和==是等價的只是比較記憶體的中的地址,我們可以通過重寫equals()來自定義自己的等價規則

ps:對基本型別的比較只能是通過==進行比較因為他們沒有equals()這個方法只要數值相同,可以不問他們的資料型別。這是因為java的自動資料型別提升。

int a = 10;
float b = 10.0f;
double c = 10.0000;

System.out.println(a==b);//true
System.out.println(a==c);//true

8個基本型別所對應的包裝型別的equals()方法也被重寫成只比較內容。


Integer num1=new Integer(12);
Integer num2=new Integer(12);

System.out.println(num1==num2);//false
System.out.println(num1.equals(num2));//true

總結:兩者區別就在於equals()方法有沒有被重寫。