2014-07-10 20 views
1

嗨,我有這種方法,我創建。它的工作是接收一個Integer A,它可以是10或30.它的意思是如果值爲10則返回TRUE,否則返回false。這個布爾方法有什麼問題?

public static boolean checkStatus(int a){ 
     if(a.equals(10)){ 
       return true; 
     } 
     return false; 
    } 

出於某種原因,我在if(a.equals(10))的條件,它說INT CAN NOT BE DEREFERNCED得到一個編譯錯誤。如果我沒有弄錯,在這種情況下不是.equals()方法嗎?

感謝您的幫助!

+4

編譯錯誤告訴你什麼? –

+0

檢查編輯,對不起 – user3029345

+0

if(a.equals(10))是一個字符串比較。不是整數。請在if條件下遵循== 10 –

回答

9

原語的Java(intlongfloat,等)不具有成員方法,因此呼叫

if (a.equals(10)) 

將無法​​編譯,因爲你試圖去參考原始。相反,你要使用的==運算符來比較原始值:

if (a == 10) 

,並保留使用equals()方法的非原始Objects

+0

您可以解釋.equals()方法何時適用。我一直忘記這一個:(謝謝! – user3029345

+0

@ user3029345比較對象時只應使用.equals() –

+0

@ user3029345我在答案底部添加了一個註釋,簡而言之,equals方法屬於'Object'宇宙超類以及Java中所有其他類,因爲它們必須在它們的層次結構鏈中擴展Object,並繼承某些版本的equals,所有對象都應該使用這種方法進行比較,因爲比較對象與==只會比較對象的引用以查看引用是否指向內存中的相同位置(不完全,但足夠接近)。 – Kon

5

可以使用equals對象而是int是一個基元類型(a),而不是一個對象。

因此,你需要這樣的東西:

public static boolean checkStatus (int a) { 
    if (a == 10) 
     return true; 
    return false; 
} 

或者更短,更明智的(在這種情況下):

public static boolean checkStatus (int a) { 
    return (a == 10); 
} 

(一)純粹主義者會說,這是證明Java並不是真正的面向對象的語言,但那是因爲它們是瘋狂的loonies :-)

+0

用於簡寫(a == 10)。冗餘如果語句無用。 –

+0

只是好奇,是否有OPs案件autoboxing? – AntonH

+0

包裝盒在哪裏裝箱? – Shail016

1

您可以使用

public static boolean checkStatus(int a){ 
     if(a==10){ 
       return true; 
     } 
     return false; 
    } 

public static boolean checkStatus(Integer a){ 

     if(a.equals(new Integer(10))){ 
       return true; 
     } 
     return false; 
    } 
+0

不確定我會在第二種情況下創建一個全新的對象,當您可以執行'if(a.intValue()== 10)'時。 – paxdiablo

1

INT是在Java和原語原始的沒有a.k.a方法的行爲。

因此,您不能致電.equalsint。因此,這裏的選項是使用==

public static boolean checkStatus(Integer a){ 
    return (a==10); 
} 

或轉換intInteger這是一個包裝類

public static boolean checkStatus(Integer a){ 
    return a.equals(10); 
} 
1

equals()方法屬於ObjectJava,它有給每一位override對象類如String, Integer and MyObject(implemented class)。但是int不是Java Object,那裏沒有equals()方法。

你可以使用== int值,你可以簡化你的代碼如下。

public static boolean checkStatus(int a){ 
    return a==10; 
} 
2

equals基本上用於對象的非基元。

==用於基元。

所以,你可以用它

public static boolean checkStatus (int a) { 
    if (a == 10) 
     return true; 
    return false; 
} 

例1: 對於對象,如果equals方法將被覆蓋,然後 「等於」 方法將返回true。

public class Employee { 
    int id; 

    @Override 
    public boolean equals(Object obj) { 
     Employee e = (Employee) obj; 
     return id == e.id; 
    } 

    Employee(int id) { 
     this.id = id; 
    } 

    public static void main(String[] args) { 
     Employee e1 = new Employee(5); 
     Employee e2 = new Employee(5); 
     System.out.println("e1.equals(e2) is: " + e1.equals(e2)); 
     System.out.println("(e1 == e2) is: " + (e1 == e2)); 
    } 
} 

輸出:

e1.equals(E2)是:

(E1 E2 ==)是:

實施例2 : 對於對象,如果equals滿足HOD不被重寫時,那麼 「等於」 方法的工作方式 「==」

public class Employee { 
    int id; 

    Employee(int id) { 
     this.id = id; 
    } 

    public static void main(String[] args) { 
     Employee e1 = new Employee(5); 
     Employee e2 = new Employee(5); 
     System.out.println("e1.equals(e2) is: " + e1.equals(e2)); 
     System.out.println("(e1 == e2) is: " + (e1 == e2)); 
    } 
} 

輸出:

e1.equals(E2)是:

(E1 == e2)爲:false

這裏「equals」方法的工作方式爲「==」。所以,不要忘記重寫對象的equals方法。

1

你可以做這樣的事情與Integer類

Integer x = 5; 
    Integer y = 10; 
    Integer z =5; 
    Short a = 5; 

    System.out.println(x.equals(y)); 
    System.out.println(x.equals(z)); 
    System.out.println(x.equals(a)); 

輸出:

false 
    true 
    false 
1

當然你可以包住整起來就是:

Integer i = new Integer(a); 

然後等號功能可以與新的Integer對象'i'一起使用。