Java中的”==“和”equals()“区别

本文详细解析了Java中基本数据类型与复合数据类型的比较方法,包括==运算符及equals()方法的区别,并通过示例代码说明不同情况下的比较结果。

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

一、java中的数据类型”==“的含义:

8大基本数据类型:byte short char int long float double boolean 他们之间的比较应使用==,比较

的是他们的值。

复合数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的

存放地址。(除非是同一个new出来的对象,比较结果为true,否则位false)因为每次

new会新开辟内存空间。

eg:

int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
本题是一个自动拆装箱的考题(自动拆装箱JDK需在1.5上)
1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
2、两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true

4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。

eg:

int a=257;
Integer b=257;
Integer c=257;
Integer b2=57;
Integer c2=57;
System.out.println(a==b);
//System.out.println(a.equals(b));  编译出错,基本型不能调用equals()
System.out.println(b.equals(257.0));
System.out.println(b==c);
System.out.println(b2==c2);
上面的代码的结果因此为 true, false, false, true;

二、equals()方法介绍:

Java中的所有的类都是继承与Object这个基类的,在Object类中定义了一个equals的方法,

这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖了,如String、Integer、Date

。这些类当中equals有其自身的实现,而不再是比较类在对内存的存放地址了。

故对于复合数据类型之间equals比较,在没有覆盖equals方法的情况下,他们之间比较的

是内存中存放位置的地址值,跟双等号结果相同。

三、String类的equals()方法

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
//判断是否为String类型的实例
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
//判断属性值是否相等
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

可以看出String类中的覆盖了的equals()方法是比较两个字符串长度、内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值