JAVA中==和equel

177 阅读1分钟

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个字符