java中的equals()方法

版权声明:版权所有,翻印必究,哈哈哈 https://blog.csdn.net/GoSantiago/article/details/88255856

java.lang.Object类是所有类的根父类,其内部equals()方法源码如下:

public bolean equals(Object obj) {
	return (this == obj);
}

因此,可以使用“==”进行数据的比较。

  • 基本数据类型的比较:根据基本类型的值判断是否相等
    注:等式两端数据类型可以不同,在不同的情况下,也可以返回true。
  • 引用数据类型的比较:比较引用类型的地址值是否相等。
public class TestEquals {

	public static void main(String[] args) {
		int i = 12;
		int j = 12;
		double k = 12.0;
		char c = 12;
		System.out.println(i == j);//true
		System.out.println(i == k);//true
		System.out.println(i == c);//true
		
		int t = 65;
		char a = 'A';
		System.out.println(t == a);//true
		
		Object obj1 = new Object();
		Object obj2 = new Object();
		System.out.println(obj1 == obj2);//false
	}
}

equals()只能处理引用类型变量。但是有很多特殊情况,例如下

public class TestEquals {

	public static void main(String[] args) {
		String s1 = new String("AA");
		String s2 = new String("AA");
		System.out.println(s1 == s2);//false
		System.out.println(s1.equals(s2));//true
	}
}

上例中,由于String类重写了equals()方法,所以会导致s1.equals(s2)的值为true。
另外,包装类、Data类、File类都重写了Object类的equals()方法,比较的是两个对象的实体内容

  • 关于String类,还要做进一步的特殊说明,首先先看下列的代码
public class TestEquals {

	public static void main(String[] args) {
		String s1 = "AA"
		String s2 = "AA";
		String s3 = new String("AA");
		System.out.println(s1 == s2);//true
		System.out.println(s1 == s3);//false!!!
		System.out.println(s1.equals(s2));//true
		System.out.println(s1.equals(s3));//true
	}
}

之所以(s1 == s3)的值为false,是因为字符串类型在内存中的存储比较特别。
除了堆栈存储区,内存中还开辟了方法区,里面包括字符串常量池。字符串常量池专门用来存储字符串
在这里插入图片描述
s1与s3的地址值不相等,因此(s1 == s3)的值为false

猜你喜欢

转载自blog.csdn.net/GoSantiago/article/details/88255856