马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

java中==和equals的区别示例代码

2024-03-06 07:04:06java学习笔记 本文浏览次数:0 百度已收录

本 文 目 录

java中==和equals的区别示例代码
# H2: Java中==和equals的区别示例代码

在Java编程语言中,==equals() 方法都用于比较对象的相等性,但它们在功能和使用场景上有所不同。== 主要用来比较基本数据类型或者引用类型的引用地址是否相同,而 equals() 则主要用于判断对象的内容或值是否相等。

步骤一:理解“==”操作符

“==”操作符比较

String str1 = new String("Hello");
String str2 = new String("Hello");

System.out.println(str1 == str2); // 输出:false

上述代码中,str1str2 分别指向了两个不同的内存区域,虽然它们包含相同的字符串内容,但是通过 == 比较的是对象的引用地址,因此输出为 false

步骤二:理解equals()方法

equals()方法比较

String str1 = new String("Hello");
String str2 = new String("Hello");

System.out.println(str1.equals(str2)); // 输出:true

在Java中,对于非基本类型的对象(如String类),默认的equals()方法会基于对象的内容进行比较。在上述例子中,尽管str1str2是两个不同的对象,但它们包含相同的字符串内容,因此调用equals()方法时返回 true

步骤三:自定义类中equals()方法的重写

equals()方法重写示例

class CustomObject {
    private int id;

    public CustomObject(int id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null || getClass() != obj.getClass())
            return false;
        CustomObject that = (CustomObject) obj;
        return id == that.id;
    }
}

CustomObject obj1 = new CustomObject(1);
CustomObject obj2 = new CustomObject(1);

System.out.println(obj1.equals(obj2)); // 输出:true

在此示例中,我们自定义了一个CustomObject类并重写了equals()方法,使其根据对象的id属性来判断两个对象是否相等,即使它们位于不同的内存地址。

总结与注意事项

  • == 通常用于比较基本数据类型(如int, char等)的值是否相等,以及引用类型是否指向同一个内存地址。
  • equals() 方法默认情况下比较的是对象的引用,但在诸如String、Integer等包装类以及自定义类中,一般需要重写equals()方法以便按对象的内容进行比较。
  • 在编写自定义类时,若需比较对象内容的相等性,请务必按照约定重写equals()方法,并同时重写hashCode()方法以保持一致性,遵循JavaBean规范。

完整代码示例:

public class EqualityDemo {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println("str1 == str2: " + (str1 == str2));
        System.out.println("str1.equals(str2): " + str1.equals(str2));

        CustomObject obj1 = new CustomObject(1);
        CustomObject obj2 = new CustomObject(1);

        System.out.println("obj1.equals(obj2): " + obj1.equals(obj2));
    }

    static class CustomObject {
        private int id;

        public CustomObject(int id) {
            this.id = id;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null || getClass() != obj.getClass())
                return false;
            CustomObject that = (CustomObject) obj;
            return id == that.id;
        }
    }
}