“CSDN”.equals(name)和name.equals(“CSDN”)的区别
首先来看两段代码
- “CSDN”.equals(name)
String name = "CSDN";
if ("CSDN".equals(name)) {
System.out.println("CSDN是全球知名中文IT技术交流平台,创建于1999年");
} else {
System.out.println("未知词条");
}
- name.equals(“CSDN”)
String name = "CSDN";
if (name.equals("CSDN")) {
System.out.println("CSDN是全球知名中文IT技术交流平台,创建于1999年");
} else {
System.out.println("未知词条");
}
很显然两者看上去并没有任何区别,结果输出为:
CSDN是全球知名中文IT技术交流平台,创建于1999年
现在来看name=null的两种情况
两者在使用equal()判断相等之前并没有判断name变量是否为null
- “CSDN”.equals(name)
String name = null;
if ("CSDN".equals(name)) {
System.out.println("CSDN是全球知名中文IT技术交流平台,创建于1999年");
} else {
System.out.println("未知词条");
}
输出:
未知词条
- name.equals(“CSDN”)
String name = null;
if (name.equals("CSDN")) {
System.out.println("CSDN是全球知名中文IT技术交流平台,创建于1999年");
} else {
System.out.println("未知词条");
}
输出(空指针异常):
Exception in thread "main" java.lang.NullPointerException
at Test.EqualTest.main(EqualTest.java:13)
null是任何一个引用类型变量的默认值,在java中你不能使用null引用来调用任何的instance方法或者instance变量。
从这里可以看出,如果你提前没对变量进行为空判断,
如果name为null,则name.equals(" CSDN")出现NullPointerException,若写为" CSND".equals(name),则可以防止NullPointerException。
推荐使用Objects.equals(a,b)方法:
对两个对象进行比较,防止空指针异常。
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
另外补充一下“ == ” 和 equals()的区别
- “ == ” 操作符既可以用于比较基本的数据类型,也可以用于比较对象,而equals只可以用于对象之间的比较
- 在比较String类型的对象时,“ == ” 操作符的原理只有两个变量是同一对象的引用时才会返回true,而equals方法只要两个变量的内容相同则返回true
- 其他类型的对象进行比较时,equals方法默认的原理是判断两者的内存地址是否相同,所以默认情况下与 “== ” 操作符返回的结果相同,但是这里应该发现差别,也就是equals方法可以被重写—用户可以定制自己的equals方法,而 “ == ”操作符不能被重写。
参考资料:
- https://bbs.csdn.net/topics/394460534?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
- https://blog.csdn.net/weixin_39428938/article/details/88867862?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1