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

2022-09-01 02:02:23
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扩展的类中,如果这有任何区别...任何想法为什么我不能在这里返回空值?


答案 1

int是一个基元,null 不是它可以接受的值。您可以将方法返回类型更改为 return,然后可以返回 null,返回 int 的现有代码将自动装箱。java.lang.Integer

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

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


答案 2

int是基元数据类型。它不是可以取值的引用变量。您需要将方法返回类型更改为包装类 。nullInteger