欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中的equals()方法

程序员文章站 2024-03-17 08:05:34
...

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,是因为字符串类型在内存中的存储比较特别。
除了堆栈存储区,内存中还开辟了方法区,里面包括字符串常量池。字符串常量池专门用来存储字符串
java中的equals()方法
s1与s3的地址值不相等,因此(s1 == s3)的值为false