有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将空值分配给int

如果可能出现以下代码:

Integer a = null;
int b = a;

这是否意味着函数为整数返回一个可能的null值是一种不好的做法

编辑1: 在这些答案中有几种不同的观点。我没有足够的信心选择其中一个


共 (6) 个答案

  1. # 1 楼答案

    Java tenerary运算符的有趣之处是:(在OSX上使用8u151)

    如果你这样做

    Integer x = map == null ? 0 : map.get ( key );
    

    这似乎很好,紧凑和所有,然后你得到一个npe!!!如果

    map.get ( key )
    

    是空的。所以我不得不把它分开,结果很好

  2. # 2 楼答案

    当您运行该代码时,它将给出一个NullPointerException。这基本上相当于:

    Integer a = null;
    int b = a.intValue();
    

    。。。这更清楚地表明它确实会失败

    您并不是真正地为int分配空值-您正在尝试并且失败

    可以使用null作为Integer的值;实际上Integer经常被用来代替int精确地作为“可空等价物”

  3. # 3 楼答案

    这是不可能的。您将获得NullPointerException

  4. # 4 楼答案

    当然,不能将null赋值给int。但是在某些情况下返回null是有意义的。Null表示未设置该值。一个典型的例子是DB列

  5. # 5 楼答案

    代码可能的,但由于取消装箱,在运行时抛出一个NullPointerException。关于

    Does it mean that a function returning a possible null value for an integer is a bad practice?

    是的。当int足够时返回Integer是无用且危险的(如您所见),因为对象可以为null,而原语不能为null。Integer应该仅在需要时使用,如在参数化类型中-List<Integer>

  6. # 6 楼答案

    这将抛出NullPointerException

    原因是您依赖于将整数值自动取消装箱到int基元类型。Java通过内部调用对象上的.intValue()来实现这一点,该对象为空

    至于这是不是一个好的做法。。。我建议不要这样做,除非代码只由您使用,而且您的行为非常好,请确保您只将此类方法的返回值分配给整数值,而不是int

    如果您的代码最终出现在其他人使用的库中,这是不安全的,我更愿意显式地抛出一个异常,有很好的文档记录,并允许调用方进行防御性编码