当前位置 博文首页 > JustinQin:Java--equals、==使用区别

    JustinQin:Java--equals、==使用区别

    作者:[db:作者] 时间:2021-09-12 09:07

    主要区别

    1、equals()是方法,==是比较运算符;

    2、比较基本数据类型时,只能用==,比较的是值是否相等;

    3、比较引用数据类型时,==比较的是引用地址是否相等,equals()则根据对象是否重写Object中的equals(),判断是equals比较引用地址还是equals比较内容

    equals比较引用地址

    对象没有对Object类中equals()方法进行重写,则比较的是引用地址,因为所有引用数据类型均继承自Object类,而Object的equals方法返回的是==比较结果即引用地址比较结果。

    Object类equals()方法源码

    equals比较内容

    对象对Object类中的equals()方法进行了重写,则返回的是比较对象的内容是否相等

    String类equals()方法源码

    <<<PS:Java中基本数据类型和引用数据类型区别

    <<<附:equals和==区别常见笔试

    #例1

    String s1 = "abc";

    String s2 = s1;

    String s3 = new String("abc") ;

    String s4= new String("abc") ;

    ?

    System out.println(s1==s2);

    System out.println(s1.equals(s2));

    System out.println(s1==s3);

    System out.println(s3.equals(s4));

    System out.println(s3==s4);

    输出答案:

    true

    true

    false

    true

    false

    ?

    结果说明:不同对象的引用地址不同,==比较的是对象的引用地址,equals()默认比较的也是对象的引用地址,重写equals后比较的是对象的内容。

    ?

    #例2

    String s1 = "a" + "b";

    String s2 = "ab";

    System out.println(s1==s2)

    输出答案:

    true

    ?

    ?

    结果说明:两个或多个字符串常量相加,预编译的时候,“+”号会被优化,多个字符串自动会合成一个字符串常量,两个字符串常量对象的引用地址相同;

    ?

    ?

    cs