簡體   English   中英

為什么布爾類中的重寫equals(Object)方法不需要布爾值/布爾值作為參數

[英]Why doesn't the overridden equals(Object) method in the Boolean class require a boolean/Boolean as an argument

由於布爾equals(Object)方法不需要布爾/布爾參數,因此可能出現以下編碼錯誤:

private void foo() {
    Boolean isSomeConditionTrue = false;
    String doSomething = "YES";
    if(isSomeConditionTrue.equals(doSomething)) {
        // Do Something
    }
}

該代碼不會“做某事”,因為編碼器忘記了在謂詞中將doSomething評估為String。 為什么布爾等於接受對象而不是布爾/布爾作為參數?

因為equals()是在Object類中定義的。

沒有可能的簽名可以滿足您的要求。
(不使Object通用,這將違背目的)

該方法覆蓋

Object.equals(Object)

因此必須接受所有對象。

同樣,你可以寫

if (isSomeConditionTrue == doSomething) 

即使這也不可能是真的。

解決此問題的一種方法是避免使用Wrappers(無論如何都不能為null)。 即,您的代碼僅在Boolean值不為null時有效,因此不要使用包裝器,而應使用原語。

private void foo() {
    boolean isSomeConditionTrue = false;
    String doSomething = "YES";
    if(isSomeConditionTrue == doSomething) { // doesn't compile
        // Do Something
    }
}

基元不僅更快,而且使值不能為null更加清晰,您可以使用== != >等常規Java操作。

equals()是Object上的方法,並且方法協定要求參數為Object。 等於合同規定,如果對象類型錯誤,則應返回false。

因此,您必須先將doSomething轉換為布爾值。 請注意,如果字符串單詞“ true”忽略大小寫,則即使Boolean.parseBoolean(String)也將僅返回Boolean.TRUE。 “是”將不會解析為TRUE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM