在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");
}
}
}
这个时候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");
}
}
}
总结
-
如果两个变量是基本数据类型(如int、char等),则直接用
==对比是否相等即可,因为他们的值是一个常量,在内存中的地址是一样的(纸一样的常量在内存中的地址是一样的) -
如果两个变量是封装后的数据类型(如Integer、String等),则用
equals对比是否相等,因为他们是属于不同的对象,虽然值可能是一样的,但这两个对象在内存中的地址肯定是不一样的