当前位置: 首页 > 面试题库 >

Java在三元数中为基元返回null

颜云瀚
2023-03-14
问题内容

以下(逻辑上)是编译时错误:

public int myMethod(MyObject input) {
   if (input == null) {
     return null; // compiler says I cannot return null for primitive type
   } else {
     return 1;
   }
}

到目前为止,一切都很好。我不明白的是,以下内容是允许的:

public int myMethod(MyObject input) {
   return input == null ? null : 1;
}

为什么?认识到这对于编译器应该很简单,还是我在这里错过了一些关键点?

(当然,如果在三元运算符中,一个以“空分支”结尾,那么它是一个NPE,还有什么?:)


问题答案:

三元条件运算符的类型由其第二和第三操作数的类型确定。

如果是

input == null ? null : 1

类型是Integer,可以同时分配null1

编译器允许您的方法返回Integer因为它可以自动拆箱为int,因此适合int返回类型myMethod

NullPointerException编译器无法检测到您的特定代码可能抛出a的事实。



 类似资料:
  • 如果我有一个Kotlin函数 我想从Java调用,我必须这样做: 看起来很难看。为什么我不能像

  • 请帮我检查数据库属性。 然后,sizeBinding有第一个元素null(用于宽度)和绑定表达式实例(用于高度绑定)。我可以使用Mode=twoway设置绑定,但是我想知道为什么如果Mode没有设置为twoway就不会创建绑定实例。我认为这是因为表达式需要比路径更复杂。但是,我尝试了,但是返回null作为绑定。我尝试了GetBinding*方法,但它们的行为与完全相同。 我谷歌搜索的唯一一个问题就

  • 我想根据条件返回一个流的值。仅以下面的例子为例,我想将任何苹果映射到< code >食物。苹果公司: 如何在流中包含三元条件?

  • 以下是presenter中调用的方法: 下面是我的测试方法: 在Super.UpdateViewModel(vm)的处理程序中,我调用“SharedPreferenceHandler.MinStance.AccessToken!!)” 在我的测试方法中有可能得到这一点吗?

  • 我写一个函数,应该返回数组时,它是真和一个字符串时,假我第一次这样写:但是当myArry是空的,除了接收我得到一个空的arr,当我写,它工作,我不明白为什么? 下面我的代码:

  • 我有一个spring boot应用程序,它有一个endpoint测试配置类和一个单元测试来测试我的http客户端。我正在尝试从应用程序中获取服务器地址和端口。位于我的src/测试中的属性。(所有类都在我的src/测试中。) 这是我的配置类代码: 我对我的中的值进行了注释。属性,然后创建一个方法,我用bean实例化该方法以返回我的服务器地址字符串。 然后,我在HttpClientTest类中使用该字