提问者:小点点

Java在传递Integer作为参数[duplicate]时隐式调用intValue


所以我遇到了一个由以下示例引起的错误:我有静态方法

private static Foo findFoo(int id) {
  //we use id here not important
}

然后我在另一种方法中使用它,比如

private static updateFoo(final Integer id, final String newData) {
  final Foo existingData = findFoo(id);
  // use existing data and update or make new
}

问题是当updateFooid参数中使用null调用时,intValue()在调用findFoo(id)时被隐式调用(我认为)并导致NPE。

我认为Java强制执行强类型,以防止在需要原语时将对象传递给参数的情况。当进行隐式调用时,这里有一般规则吗?这可以被编译器/IDE采用并可能强制或警告吗?


共1个答案

匿名用户

如果您使用包装类作为其原始对应部分,则总是会发生这种情况。int不能为空,因此您必须将intValue()调用到包装类上。

您可以在调用findFoo()之前进行空检查,或者只是使用updateFoo()的原语intfindFoo()中的包装类。

我认为Java强制执行强类型化,防止在需要原语时将对象传递给参数。

整数的类型合适,所以它的类型被覆盖了。在这种情况下,它只是一个隐含的铸造(拆箱),这完全没问题。