行业资讯 2025年08月6日
0 收藏 0 点赞 188 浏览 1927 个字
摘要 :

文章目录 1. == 操作符 原因解析 2. equals 方法 总结 在Java编程中,== 和 equals 都是用来比较对象的操作符,但它们在比较对象时有着不同的用途和行为。理解它们之……




  • 1. == 操作符
    • 原因解析
  • 2. equals 方法
  • 总结

在Java编程中,==equals 都是用来比较对象的操作符,但它们在比较对象时有着不同的用途和行为。理解它们之间的区别对于正确地比较对象是至关重要的。

1. == 操作符

在使用 == 进行比较时,其作用效果是不同的,可以总结如下:

基本类型:在进行基本类型的比较时,实际上是在比较它们的值是否相同。如果两个基本类型的值相等,那么它们会被判定为相等。

引用类型:对于引用类型,比如对象或者数组,使用 == 进行比较时,实际上是在比较它们的引用是否相同。也就是说,如果两个引用类型变量引用了同一个对象或数组,那么它们会被认为是相等的。

示例代码:

String x = \"hello\";
String y = \"hello\";
String z = new String(\"string\");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

原因解析

因为 x 和 y 指向的是同一个“hello”字符串地址引用,因为类似String x=”hello”;这个语句的含义,是在运行时的常量池中赋值,相同的字符串只会分配一次,第二次是将内存池中这个指向该对象的引用返回,所以x和y其实是指向同一个内存地址,所以 == 返回 true,而 new String()方法则重写创建了内存空间,内存地址不一样,所以 == 返回为 false,而 equals 比较的一直是值,他们的值都是字符串“hello”,所以结果都返回为 true。

2. equals 方法

equals 方法是定义在 Object 类中的方法,用于比较两个对象的内容是否相等。默认情况下,equals 方法使用的是和 == 相同的引用比较,但许多类会重写 equals 方法,使其根据对象的内容来进行比较。

对于 equals 方法,实际上它本质上是 == 运算符,但某些类如 String 和 Integer 为了实现特定的功能,重写了 equals 方法,将其转变为值的比较。通过下面的代码示例,我们可以更好地理解这个概念。

首先,我们来看一个默认情况下使用 equals 方法来比较具有相同值的对象的代码:

class Person {
    public Cat(String name) {
        this.name = name;
    }

    private String name;
}

Person c1 = new Person (\"小明\");
Person  c2 = new Person (\"小明\");
System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看下 equals 源码就明白了,源码如下:

public boolean equals(Object obj) {
    return (this == obj);
}

原因就在于 equals 本质上就是 ==,那问题来了,两个相同值的 String 对象,为什么equals返回的是 true?代码如下:

String s1 = new String(\"小明\");
String s2 = new String(\"小明\");
System.out.println(s1.equals(s2)); // true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    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 类重写了 Object 的 equals 方法,把引用比较改成了值比较,因此就返回了true。

总结

总体而言,在Java中,== 运算符在处理基本类型时进行值比较,在处理引用类型时进行引用比较。而 equals 方法在默认情况下执行引用比较,但许多类(例如 String 和 Integer)已经重写了 equals 方法,使其变为值比较。因此,通常情况下,equals 方法用于比较值是否相等。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9112.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号