当前位置: 代码迷 >> J2SE >> "abc"equals(str)跟str.equals("abc")的区别,从源码分析为什么"abc"euqals(str)可以避免空指针
  详细解决方案

"abc"equals(str)跟str.equals("abc")的区别,从源码分析为什么"abc"euqals(str)可以避免空指针

热度:589   发布时间:2016-04-23 19:36:45.0
"abc".equals(str)和str.equals("abc")的区别,从源码分析为什么"abc".euqals(str)可以避免空指针
public class StringDemo {
public static void main(String[] args) {
String str1 = "hello";
String str2 = null;
System.out.println(str1.equals(str2));
}
}


运行结果: false

public class StringDemo {
public static void main(String[] args) {
String str1 = "hello";
String str2 = null;
System.out.println(str2.equals(str1));
}
}


运行结果:空指针异常

报空指针,为啥嘞?为啥st1.equals(str2)会打印false,而str2.equals(str1)就报空指针

------解决思路----------------------
1. Calling the instance method of a null object. 
2. Accessing or modifying the field of a null object. 
3. Taking the length of null as if it were an array. 
4. Accessing or modifying the slots of null as if it were an array. 
5. Throwing null as if it were a Throwable value. 

总共五种情况会抛NPE,你的是第一种,调用了空对象的实例方法
st1.equals(str2)的情况不属于五种所列~
------解决思路----------------------
你这里使用的str2字符串对象是null,表示没有指向任何对象,在执行str2.equal()方法时,虚拟机会发现str2不能调用其实例方法equals(),所以返回异常,表明这是一个需要引起注意的地方;反过来str1.equals(str2),str1不为null,所以不会抛出异常,一个不为空,一个为空,当然返回false
  相关解决方案