== 和 equals() 有什么区别?

举报
wljslmz 发表于 2023/03/31 17:30:23 2023/03/31
【摘要】 == 和 equals() 都是 Java 中比较对象的方法,但是它们的作用和实现方式不同。本文将详细介绍 == 和 equals() 的区别,并提供相关代码进行演示。 == 的作用== 用于比较两个对象的内存地址是否相等,即是否是同一个对象。如果两个对象的地址相等,返回 true,否则返回 false。下面是一个示例代码:String s1 = "hello";String s2 = "h...

== 和 equals() 都是 Java 中比较对象的方法,但是它们的作用和实现方式不同。本文将详细介绍 == 和 equals() 的区别,并提供相关代码进行演示。

== 的作用

== 用于比较两个对象的内存地址是否相等,即是否是同一个对象。如果两个对象的地址相等,返回 true,否则返回 false。

下面是一个示例代码:

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

System.out.println(s1 == s2);  // true
System.out.println(s1 == s3);  // false

上述代码中,s1 和 s2 都是使用相同的字符串常量 “hello” 初始化的,它们指向的是同一个对象,因此 s1 == s2 返回 true。而 s3 是通过 new 关键字创建的新对象,与 s1 和 s2 指向的对象不同,因此 s1 == s3 返回 false。

equals() 的作用

equals() 用于比较两个对象是否相等,即对象的内容是否相同。Object 类中的 equals() 方法是使用 == 进行对象比较的,因此如果没有重写 equals() 方法,那么调用 equals() 方法和调用 == 方法的效果是相同的。

例如,下面是一个示例代码:

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

System.out.println(s1.equals(s2));  // true
System.out.println(s1.equals(s3));  // true

在上述代码中,s1 和 s2 的值相同,因此它们调用 equals() 方法返回 true。s3 虽然是一个新的对象,但它的值与 s1 和 s2 相同,因此也返回 true。

== 和 equals() 的区别

== 比较的是两个对象的内存地址,而 equals() 比较的是两个对象的内容。

例如,下面是一个示例代码:

String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1 == s2);        // false
System.out.println(s1.equals(s2));  // true

在上述代码中,s1 和 s2 是两个新的对象,它们的内存地址不同,因此 s1 == s2 返回 false。但是它们的内容相同,因此 s1.equals(s2) 返回 true。

此外,equals() 方法可以被重写,使其能够比较对象的内容,而不仅仅是比较对象的内存地址。例如,下面是一个重写 equals() 方法的示例代码:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person other = (Person) obj;
            return this.name.equals(other.name) && this.age == other.age;
        }
        return false;
    }
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。