JAVA中==和equel
1 ==和equel的区别
1.1 ==
① 基本数据类型变量: 比较的就是值是否相等; ② 引用数据类型变量: 比较的是对象的地址是否一样;(排除特殊 String)
1.2 equel
① 基本数据类型: 不能够使用!基本数据类型不是对象,不能够调用Object中的方法
② 引用数据类型 : 但是在Object的源码中定义的就是 == 进行比较
③ 定义好的类没有覆写过equals方法,则会直接调用到了Object中的equals方法,那么本质还是在使用==比较
1.3 针对字符串和非字符串
(1)对于字符串常量,==比较的是内存中的首地址,如果不是同一个对象,==返回false。equals()比较的是内容,如:
String s1="abc",s2="abc";
String s3=new String("abc");
String s4=new String("abc");
s1=s2; //true
s1.equals(s2); //true
s3.equals(s3); //true
s3==s4; //false
(2)对于非字符串变量,equals()比较的是内存的首地址,==比较的也是首地址。此时,两者等价,都是比较两边指向的是不是同一个对象。内存地址不同则对象不同。
class Sample{};
public static void main(String[] args){
Sample v1=new Sample();
Sample v2=new Sample();
System.out.println(v1.equals(v2)); //false
System.out.println(v1==v2); //false
}
2 str==null、"".equel(str)、str.length==0
① str==null
表示str没有指向任何字符串,即str在内存中的值是没有意义的,如果成立往往会引起空指针异常
② "".equals(str) 和 str.length==0
表示str指向了某个确定的字符串,str的内存值是某个确定的内存单元。只不过这个字符串包含了0个字符