String str = null;if(str==null){
 str = "a"; 
}
与 
if(str.equals(null)){str = "b";
}这两个if有什么不同?分别会出现什么结果?说说它们为什么会分别出现这种结果????

解决方案 »

  1.   

    很明显下面的是java.lang.NullPointerException
      

  2.   

    ==null不会异常,
    str.equals如果str是null的话,就会出空指针异常了,因为空对象不能用。操作符
      

  3.   

    ==比较的是str指向的引用地址,也就是常量词,在空间开辟一块地址,两个对比,equals是指明的对象指的比较,第一个不会报错,会给赋值,第二个还呆研究,单纯的测试似乎不会报错,在具体的程序开发中就会报错,说是空指针异常
      

  4.   

    第一个不说了,很简单,返回真,只说第二个if(str.equals(null)){ str = "b"; 

    这个主要得看String的equals方法public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {//看这句 null instanceof String 返回的是假,所以返回假
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
    return false;
    }
    return true;
        }
    }
    return false;
        }if (anObject instanceof String) {//看这句 null instanceof String 返回的是假,所以返回假