Java 判断引用类型相等与否

426 阅读1分钟

在Java中,判断值类型的变量是否相等,可以使用 == 运算符。

但是,判断引用类型的变量是否相等, == 表示“引用是否相等”,或者说,是否指向同一个对象。

例如,下面的两个String类型,它们的内容是相同的,但是,分别指向不同的对象,用 == 判断,结果为 false

  • == : 对比的是两个变量(对象)的内存地址
  • a.equals(b) : 对比的是两个变量(对象)的值

例子

public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        
        System.out.println(s1);
        System.out.println(s2);
        
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
    }
}

截屏2023-01-10下午5.59.45.png

这个时候s1 == s2 判断,得出来是 false

调整

s1.equals(s2)来替代s1 == s2,要判断引用类型的变量内容是否相等,必须使用equals()方法:

public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        
        System.out.println(s1);
        System.out.println(s2);
        
        if (s1.equals(s2)) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
    }
}

截屏2023-01-10下午6.10.22.png

总结

  • 如果两个变量是基本数据类型(如int、char等),则直接用==对比是否相等即可,因为他们的值是一个常量,在内存中的地址是一样的(纸一样的常量在内存中的地址是一样的)

  • 如果两个变量是封装后的数据类型(如Integer、String等),则用equals对比是否相等,因为他们是属于不同的对象,虽然值可能是一样的,但这两个对象在内存中的地址肯定是不一样的