gpt4 book ai didi

java - 如果传递的是 final 对象,是否仍应检查 null?

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:24 24 4
gpt4 key购买 nike

检查以下代码:

    @Override
public int compareTo(final Intersection o) {
if (o == null)
return 0;

double distance = t;
double distance2 = o.t;

if (distance == distance2)
return 0;


return distance2 > distance ? -1 : 1;
}

一切似乎都很好,但是 0 可能会在两个不同的条件下返回这一事实让我有些困扰。但是,如果我将 distancedistance2 的变量赋值移动到顶部,我的 IDE 会警告我

            if (o == null) 
return 0;

然后将是“死”代码。如果是这样的话,在这种情况下甚至应该检查 null 吗?


我的意思是:

@Override
public int compareTo(final Intersection o) {

double distance = t;
double distance2 = o.t;

if (o == null)
return 0;

if (distance == distance2)
return 0;


return distance2 > distance ? -1 : 1;
}

最佳答案

final可以为null,只是表示它不能被赋值,在匿名内部类等中可见。

在你的情况下,问题是不同的:(见评论)

public int compareTo(final Intersection o) {

double distance = t;
double distance2 = o.t; // here you use it, potentially causing NPE

if (o == null) // if o was null, this is never reached
return 0;

if (distance == distance2)
return 0;


return distance2 > distance ? -1 : 1;
}

关于java - 如果传递的是 final 对象,是否仍应检查 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com