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

Java作为三元运算符允许的int返回null,但if语句则不允许

岳嘉悦
2023-03-14
问题内容

让我们在以下片段中查看简单的Java代码:

public class Main {

    private int temp() {
        return true ? null : 0;
        // No compiler error - the compiler allows a return value of null
        // in a method signature that returns an int.
    }

    private int same() {
        if (true) {
            return null;
            // The same is not possible with if,
            // and causes a compile-time error - incompatible types.
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}

在这个最简单的Java代码中,temp()即使函数的返回类型为,该方法也不会发出编译器错误int,并且我们正在尝试返回值null(通过语句return true ? null : 0;)。编译时,这显然会导致运行时异常NullPointerException

但是,如果我们用一个if语句(如在same()方法中)表示三元运算符,这似乎是错误的,它确实会发出编译时错误!为什么?


问题答案:

编译器将对的解释解释nullnull Integer,对条件运算符应用自动装箱/拆箱规则(如Java语言规范15.25中所述),并愉快地前进。这将NullPointerException在运行时生成一个,你可以通过尝试进行确认。



 类似资料:
  • 我将null传递给json.parse(),虽然第一个参数文档中说明它应该是一个字符串值,但它仍然可以提供。 为什么这不会抛出一个错误,即使文档声明这是用于字符串的,这能在多个浏览器中安全可靠地使用吗?

  • 我试图执行我的保存endpoint到邮递员,我收到这个错误: 原因:org.h2.jdbc.JdbcBatchUpdateException: NULL不允许列CREATION_DATE;SQL语句:插入到客户(authentication_uid、creation_date、customer_uid、default_payment_method_uid、guid、last_edit_date、p

  • 问题内容: 这是我的代码,但是我没有得到方法如何接受类型作为返回值。如何运作?谁能解释一下这种方法的工作原理? 提前致谢 :) 问题答案: 好的,所以首先要做的是: 这是一个不断扩大的原始类型转换,因此这是合法的。您可以: 但是您不能: 第二:它返回的根本不是ASCII码。Java执行Unicode。 碰巧的是,当创建Java时,Unicode仅定义了适合16位的代码点。因此,它被创建为2字节的无

  • 我目前正在使用MySQL for DB connection开发一个Struts2 Web应用程序,并且在实际工作中遇到了代码部分的问题。恒定误差: 我目前拥有的RequestAction类基本上是我的一个工作项目的完整副本,但由于某些原因,我无法使其用于此应用程序。 请求操作。Java: 不知道为什么连接不工作,我试图乱搞,看看从我的其他项目,看看有什么差异,使连接和无法找到它,除非是给问题。

  • 问题内容: 我是第一次使用oracle,我有一个名为ExpenseReport的表,该表存储有关费用的详细信息。 我希望Null允许ApprUserNo,如果ERStatus =’PENDING’,将不胜感激,我一直在努力整理整个上午 问题答案: 您需要重新形成约束。 首先,如果您希望一个字段保留空值,而不考虑其他任何规则,则该字段必须为可空字段。 其次,创建一个约束,说ApprUserNo不能为

  • 问题内容: 我想知道与int相比,java是否自动将Integer转换为int?还是==尝试比较原始元素上的引用? 这是真的吗?还是我需要做? 问题答案: 是的,使用参数进行比较时,如有必要,将取消装箱。 Java语言规范的相关部分: 15.21.1数值相等运算符==和!= 如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可以转换(第5.1.8节)为数字类型,则对操作数(第5.6.