在JAVA中,== 和equals使用记录

本文详细解析了Java中==与equals的区别,说明了两者分别用于比较引用地址和内容的具体场景,并通过示例代码展示了如何正确使用它们。此外,还探讨了String类型的特殊处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在JAVA中,== 和equals往往容易混淆,具体的使用会很模糊。

  • 对于基本数据类型来讲,只能用 == 比较,这个比较简单,直接比较即可。

  • 但在比较String等引用类型时,是使用== 还是equals,他们具体都是比较的内容?还是指向地址?

    “==” 比较的是引用地址,

    “equals” 比较的是具体的内容(针对于重写equals方法的Object类型)

        Double double1 = new Double(1111);
        Double double2 = new Double(1111);
        System.out.println(double1 == double2);     //false
        System.out.println(double1.equals(double2)); // true

        String string1 = new String("11111");
        String string2 = new String("11111");
        System.out.println(string1 == string2); //false
        System.out.println(string1.equals(string2));//true

        //当然查看Double的重写的equals,大体可以看出是比较了他具体的值是否相同。
        public boolean equals(Object var1) {
        return var1 instanceof Double &&                                 doubleToLongBits(((Double)var1).value) == doubleToLongBits(this.value);
    }

为什么说针对于重写了equals方法的Object类型呢,java所有的类都是继承Object类的,如果不进行重写equals,那么和使用 == 效果是一样的。可以看到Object的源码:是直接使用 == 进行了比较。

public class Object {
    public Object() {
    }
    //...//
    public native int hashCode();
    public boolean equals(Object var1) {
        return this == var1;
    }

所以说,像Java中的封装类型,Double,Integer。。等拿到对象进行比较时 ,使用equals比较其值(内容)是否相同。

对于String还有经常混淆的一个问题。

String a = "1234";
String b = "1234";
String c = new String("1234");
System.out.println(a == b);         // true
System.out.println(a.equals(b));    // true
System.out.println(a == c);         // false
System.out.println(a.equals(c))     // true
// 对于a,b,直接赋值首先回去内存中找是否存在"1234"的引用,如果存在,直接将引用指向a b,所以a,b 所对应的地址值是相等的。
// c 直接new的String,直接创建了c对象,而很显然地址值是不同的,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值