您的位置:首页 > 其它

对null和equals有必要了解一点东西(编码规范)

2018-01-03 17:03 288 查看
null == o 和 o == null 的区别

public class Main {
public static void main(String[] args) {
Object o = null;
if (o == null) {
System.out.println("o == null");
}
if (null == o) {
System.out.println("null == o");
}
}
}


运行结果:

o == null

null == o

两段代码的效果是一样的,那为什么编程规范里要把null提前呢?

假如你少写了个等号,写成a = null是不会报错的,但是null = o,会报错,所以习惯写null == o更好

“abc”.equals(str) 和 str.equals(“abc”) 的区别

public class Main {
public static void main(String[] args) {
String str = "abc";
System.out.println(str.equals("abc"));
System.out.println("abc".equals(str));
}
}


运行结果:

true

true

字符串放在equals前面和后面看似没有区别,但是它隐藏了一个巨大的隐患。看以下代码:

public class Main {
public static void main(String[] args) {
String str = null;
System.out.println("abc".equals(str));
System.out.println(str.equals("abc"));
}
}


运行结果:

false

Exception in thread “main” java.lang.NullPointerException

at com.yhc2.Main02.main(Main.java:8)

我们可以发现字符串放在前面的正常运行,字符串放在后面的出现了空指针异常,那是因为放在后面要有一个前提,就是字符串不能为空,而放在前面非常巧妙的避免这个问题,而且逻辑上一个字符串确实不equals一个null值,所以返回false。

总结:常量放在左边是基本素养
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  equals null 编码规范