1. 程式人生 > 其它 >Java 中的“==”與“equal()”

Java 中的“==”與“equal()”

技術標籤:java

在Java中,“==”與equal是一對容易混淆的概念,到底他們有什麼區別、什麼時候用==,而什麼時候又應該用equal()呢?
首先說一下,Java中的變數按照資料型別來分可以分為基本資料型別(如:byte,short,char,int,long,float,double等)和引用資料型別(類、介面、陣列)。
對於“==”而言
一般“==”左右兩邊用的是基本資料型別,實際上其會判斷左右兩邊對應的ASCII值是否相等,相等則返回true. 而equal方法是不能用於這些原始資料型別的。
而若“==”接的是引用型別(如兩邊是物件、或陣列名),其比較的是地址值,即左右兩邊的地址是否指向同一個物件。是則返回true。所以若“==

”接的是引用型別,
則其是用來判斷左右兩邊是否為同一個物件。在這裡有一個特別的,即String資料型別,其屬於引用型別。但其用“==”判斷時有兩種情況,如下面的程式碼圖所示:
若是使用基本資料型別的方法賦值,a==b為true,即它們指向的是同一個物件。而若使用new的方法新建物件是,此時a==b為false,也就是說a與b為兩個不同的物件。

    @Test
    public void test() {
    	String a="123";
    	String b="123";
    	System.out.println(a==b);
//true String c=new String("123"); String d=new String("123"); System.out.println(c==d);//false }

對於equal方法而言
其實所有的的類都直接後間接繼承自Object類。Object類中equal方法的定義如下:

 public boolean equals(Object obj) {
        return (this == obj);
    }

可以看到其用的就是“==”,也就是說,如果你不在類中重寫equal方法,那你使用的實際上就是“==

”,所以一般對於自定義的類,我們要使用equal方法一般都要對其重寫。對String中的equal已經被重寫過了,所以我們可以直接用於判斷兩字串是否相同。