📜  Java程序区分字符串== 运算符和equals()方法(1)

📅  最后修改于: 2023-12-03 14:43:03.360000             🧑  作者: Mango

Java程序区分字符串== 运算符和equals()方法

在Java中,字符串是一个非常常见的数据类型,而字符串的比较则是必不可少的操作。但是,对于字符串的比较,有两个方法:==运算符和equals()方法。这两种方法有什么区别呢?接下来我们来详细介绍。

1. ==运算符

==运算符在Java中是比较两个对象是否相等的方法,当且仅当两个对象在内存中地址相等时,==运算符才返回true。下面是一个例子:

String a = "hello";
String b = "hello";
if (a == b) {
    System.out.println("a和b地址相等");
}

上面的代码输出的结果为“a和b地址相等”,因为a和b引用的是同一个字符串对象,所以它们的地址相等。

但是,如果我们写成下面的代码:

String a = "hello";
String b = new String("hello");
if (a == b) {
    System.out.println("a和b地址相等");
}

输出的结果会是什么呢?事实上,输出结果为null,因为a和b引用的虽然是两个内容相等的字符串,但是它们的地址是不同的。

2. equals()方法

equals()方法是Java中判断两个对象是否相等的常用方法。和==运算符不同的是,equals()方法比较的是两个对象的内容是否相等。我们可以使用equals()方法将上面的代码修改为:

String a = "hello";
String b = new String("hello");
if (a.equals(b)) {
    System.out.println("a和b内容相等");
}

上面的代码输出的结果为“a和b内容相等”,因为a和b所包含的内容都是“hello”。

需要注意的是,如果我们没有重写equals()方法,那么默认的判断机制也是比较对象的地址是否相等。因此,如果我们自定义一个对象需要使用equals()方法进行内容上的比较,就需要重写equals()方法。

class MyClass {
    private int value;

    public MyClass(int value) {
        this.value = value;
    }

    // 重写equals()方法,判断传入的对象是否内容相等
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof MyClass)) {
            return false;
        }
        MyClass mc = (MyClass) obj;
        return mc.value == this.value;
    }
}

MyClass mc1 = new MyClass(1);
MyClass mc2 = new MyClass(1);
if (mc1.equals(mc2)) {
    System.out.println("mc1和mc2内容相等");
}

上面的代码中,我们自定义了一个MyClass类,并重写了它的equals()方法。实例化两个MyClass对象mc1和mc2,它们的value属性都是1,因此它们的内容相等。所以输出的结果为“mc1和mc2内容相等”。

总结一下,==运算符比较的是对象地址是否相等,而equals()方法比较的是对象的内容是否相等。如果需要比较对象的内容,那么我们应该使用equals()方法进行比较。