42
public int pollDecrementHigherKey(int x) {
            int savedKey, savedValue;
            if (this.higherKey(x) == null) {
                return null;  // COMPILE-TIME ERROR
            }
            else if (this.get(this.higherKey(x)) > 1) {        
                savedKey = this.higherKey(x);
                savedValue = this.get(this.higherKey(x)) - 1;
                this.remove(savedKey);
                this.put(savedKey, savedValue);
                return savedKey;
            }
            else {
                savedKey = this.higherKey(x);
                this.remove(savedKey);
                return savedKey;
            }
        }

メソッドは、TreeMap の拡張であるクラス内にあります。それが違いを生む場合...ここで null を返せない理由はありますか?

4

5 に答える 5

64

intはプリミティブであり、null は取ることができる値ではありません。メソッドの戻り値の型を return に変更するjava.lang.Integerと、null を返すことができ、int を返す既存のコードは自動ボックス化されます。

Null は参照型にのみ割り当てられます。これは、参照が何も指していないことを意味します。プリミティブは参照型ではなく、値であるため、null に設定されることはありません。

オブジェクト ラッパー java.lang.Integer を戻り値として使用すると、オブジェクトが返され、オブジェクト参照が null になる可能性があります。

于 2013-06-20T19:07:38.450 に答える
0

intはプリミティブであり、それを返すことはできませんnull。戻りたい場合はnull、署名を次のようにマークします。

public Integer pollDecrementHigherKey(int x) {
    x = 10;

    if (condition) {
        return x; // This is auto-boxing, x will be automatically converted to Integer
    } else if (condition2) {
        return null; // Integer inherits from Object, so it's valid to return null
    } else {
        return new Integer(x); // Create an Integer from the int and then return
    }
    
    return 5; // Also will be autoboxed and converted into Integer
}
于 2013-06-20T19:09:14.053 に答える
-2

本当に null を返しますか? あなたができることは、おそらくsavedkeyを0値で初期化し、0をnull値として返すことです。もっと簡単にできます。

于 2013-06-20T19:14:51.350 に答える