在签名为return int的方法中返回null?

时间:2013-06-20 19:06:02

标签: java null return

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?

5 个答案:

答案 0 :(得分:49)

int是一个原语,null不是它可以承担的值。您可以将方法返回类型更改为返回java.lang.Integer,然后您可以返回null,并且返回int的现有代码将自动进行生成。

Null仅分配给引用类型,这意味着引用不指向任何内容。基元不是引用类型,它们是值,因此它们永远不会设置为null。

使用对象包装器java.lang.Integer作为返回值意味着您要传回一个Object,并且对象引用可以为null。

答案 1 :(得分:2)

int是原始数据类型。它不是可以采用null值的引用变量。您需要将方法返回类型更改为Integer包装类。

答案 2 :(得分:0)

类型int是基元,如果您想要返回null,则不能是null,将签名标记为

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

        if(condition){
         return x;      // this is autoboxing, x will be automatically converted to Integer
        }else if(condition2){
         return null; // Integer referes to Object, so valid to return null
        }else{
         return new Integer(x); // manually created Integer from int and then return

         }
         return 5; // also will be autoboxed and converted into Integer
  }

答案 3 :(得分:0)

将返回类型更改为java.lang.Integer。这样您就可以安全地返回null

答案 4 :(得分:-2)

你真的想要返回null吗?你可以做的事情,可能是使用0值初始化savedkey并返回0作为空值。它可以更简单。