Java中==和equals的区别
- ==在java中的作用:
==是个运算符只要针对基本数据类型(short,int,byte,long,boolean,char,float,double),比较的是值是否先等,但也会有比较引用类型的,这个时候比较的是引用地址
比如
Int a = 20;
Int b = 20;
System.out.println(a==b);答案是true
String a = “abc”;
String b = “abc”;
System.out.println(a==b);答案是true因为是String字符串的值是不可变的,它在内存中会 保留一份然后b拿到的也是同一个对象
String a = new String(“abc”);
String b = new String(“abc”);
System.out.println(a==b);答案是false因为使用了new关键字,他们是两个不同的对象,当 ==比较的引用类型,则比较的是引用地址
String a = new String(“abc”);
String b = a;
System.out.println(a==b);答案是true,因为a把引用地址赋值给了b
- equals在java中的作用比较对象内容是否相等,注意的是equals不能比较基本数据类 型,如果没有对equals方法进行重写,则equals相当于”==”,比较的是引用类型的值指向的 引用地址是否相等
String和Integer会重写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;
}