规避空指针的技巧
在许多java代码中,我们或多或少会遇到判断某个指针是否匹配目标指针的情况。
在这个过程中就会遇到一个隐藏的bug:空指针异常
今天我们就来学习如何在编程中解决这个问题。
我们先要有待匹配集合(unFirmString)和目标集合(firmString)
这里假定我们的待匹配集合因为某些不可抗因素出现了指针为空的情况
如果我们这样进行匹配:
public class NullPoint {
public static void main(String[] args) {
List<String> unFirmString = null;
List<String> firmString = new ArrayList<>();
firmString.add("博");
firmString.add("主");
firmString.add("最");
firmString.add("帅");
if(unFirmString.equals(firmString)){
System.out.println("空指针验证成果!");
}
}
}
那么结果一定是这样的:
出现了!空指针异常!!!
当然,如果把.equals()方法改成“==”是不会报错的。
但是!!!
但是!!!!!!
但是!!!!!!!!!!!
我们有更好的方法!
那就是重启颠倒一下待匹配集合(unFirmString)和目标集合(firmString)的顺序。
以下是细节:
先上代码
public class NullPoint {
public static void main(String[] args) {
List<String> unFirmString = null;
List<String> firmString = new ArrayList<>();
firmString.add("博");
firmString.add("主");
firmString.add("最");
firmString.add("帅");
if(firmString.equals(unFirmString)){ //注意此处方法内外的变化
System.out.println("空指针验证成果!");
}
}
}
这里,我们交换了firmString和unFirmString(空指针)的顺序。
也许这里会有同学说:
“你这不是脱裤子放屁么!换==不就完事儿了?”
但是!
各位同学有没有考虑到equals()方法和等值运算符之前是有本质区别的?
替换成“==”虽然在大多数情况下是和equals()方法等效的,但是
他们之间的区别在于:
等值运算符是在比较指针的值
equals()方法是在比较对象的内容
所以,考虑到代码实现准确性的问题,
在某些情况下我们是无法避免使用equals()方法的!!!
所以此时我们规避空指针异常的办法就是将确定的目标对象作为调用equals()方法的对象。
这样一来我们就可以很大程度上避免空指针的出现。
关注Kloney,学习更多编程知识和小技巧。