JAVA中的"=="和equals的区别
1 “==”
== 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同
比较基本类型和引用变量时只能用==
如果是对象类型,Objet obj = new Object()
obj占用栈内存 比较内存首地址
new Object()占用堆内存 比较内存中的数值
2 equals比较两个独立对象的内容是否相同
equals是Object类的方法,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用" == "
操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用 " == " 会得到同样的结果
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
当然我们也可以重写这个equals方法,自己想怎么比较就怎么比较
举个栗子
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
String s4 = new String("123");
/* 值比较 */
System.out.println(s1==s2); /*true*/
/* 地址值比较 */
System.out.println(s1==s3); /*false*/
/* 内容比较 */
System.out.println(s1.equals(s3)); /*true*/
System.out.println(s3.equals(s4)); /*true*/