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。
总结:常量放在左边是基本素养