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,是因为字符串类型在内存中的存储比较特别。
除了堆栈存储区,内存中还开辟了方法区,里面包括字符串常量池。字符串常量池专门用来存储字符串
s1与s3的地址值不相等,因此(s1 == s3)的值为false
上一篇: Codeforces 1342 B. Binary Period
下一篇: 第十一章:串