浅色年华的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


打赏

分享到:

最近浏览
王庆乾wdq LV210月7日
最代码贡献等级说明
逝水流9月28日
暂无贡献等级
李先森 LV19月18日
最代码贡献等级说明
暂无贡献等级
fengshao0079月7日
暂无贡献等级
junwuxie8月29日
最代码贡献等级说明
打豆豆8月23日
暂无贡献等级
shaziliao8月21日
暂无贡献等级
lnysjrx8月20日
最代码贡献等级说明
一名小菜b8月19日
暂无贡献等级
微微上翘8月18日
最代码贡献等级说明
东北人8月14日
最代码贡献等级说明
overllzz8月10日
暂无贡献等级
4608281738月10日
最代码贡献等级说明
8123864138月8日
最代码贡献等级说明
cs19948148148月8日
暂无贡献等级
szbeyond8月4日
暂无贡献等级
JiangBigPan8月2日
最代码贡献等级说明
zhoushugeng88月1日
最代码贡献等级说明
a10166647368月1日
最代码贡献等级说明
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友