浅色年华的gravatar头像
浅色年华 2017-07-07 10:49:52
java语言== 和equal语法到底有什么区别

== 是什么?

“==”在Java编程语言中是一个二元操作符,用于比较基本数据类型(byte、shot、int、long、float、double、char、boolean)和对象。对于基本数据类型,用“==”比较就是比较他们的数值。对于引用数据类型(类,接口,数组)“==”对比两个对象基于内存引用,如果两个对象的引用完全相同(指向同一个对象)时,“==”操作将返回true,否则返回false。

equal是什么?

equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。默认的equals方法实现是与“==”操作一样的,基于业务需求重写equals方法是最好的实践之一。

举个例子

String类重写了equals方法,它返回true如果两个字符串对象包含有相同的内容,但是==只有他们的引用地址相同时才返回true

public class TestEqual {
    public static void main(String[] args) {
        String s1 = "123";
        String s2 = "123";
        String s3 = new String("123");
        String s4 = new String("123");

        System.out.println(s1 == s2);
        System.out.println(s3 == s4);
        System.out.println(s2 == s3);
        System.out.println(s2.equals(s1));
        System.out.println(s2.equals(s4));
    }
}

运行结果如下:

true
false
false
true
true

问题来了,String 不是基本数据类型,==比较的肯定是对象在内存中的引用,s1难道和s2引用是一样的么?

第一条现在内存中创建了"123"这个String,然后将reference赋给s1,如果这个时候还有一条语句String s2= "123";那么JVM将不再创建"123",而是直接将第一个"123"的reference赋给s2,也就是说,s1和s2是使用同一块内存,而如果加上String s3= new String("123");那JVM将在内存中再创建一块区域放上“123”这个字符串。所以String类型比较特殊,单独记一下就可以拉frown


打赏
最近浏览
1248612588  LV1 2019年10月22日
小河码  LV1 2019年8月30日
小明程序员  LV9 2018年11月13日
1486780197  LV2 2018年11月10日
付修立  LV4 2018年8月31日
梦醒繁华丶  LV19 2018年4月26日
HTZone  LV1 2017年12月12日
coding喵  LV16 2017年11月19日
王庆乾wdq  LV13 2017年10月7日
逝水流  LV1 2017年9月28日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友