Java中==与equals的用法与区别
==:
==等于对于基本数据类型和引用类型的作用效果是不同的,如下:
- 基本类型:比较值是否相同
- 引用类型:比较是否为同一个引用
//对于基本类型
int a = 1;
int b = 1;
System.out.println(a==b); //ture
//对于引用类型
String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1 == s2); //false
代码解读: 对于基本类型(int)比较的是值是否相同,所以输出结果为true。对于引用类型String,s1和s2由两次new得来,所指向引用并不相同,所以结果为false。但如果是这样:
String s1 = "123";
String s2 = "123";
System.out.println(s1 == s2);//true
代码解读:因为String类型较常用,所以官方给出通过=直接赋值的方法,通过这种方式赋值的字符串变量会存储在字符串常量池中,而不会新创建一个引用,所以此时==比较结果是true
equals:
equals方法基本与==作用相同,不过String类型和基本类型的包装类(Integer等)重写了equals方法,把它变成了值比较。有兴趣的同学可以看一下源码:
引用类型默认的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
String的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;
}
如果还有疑问的话可以在评论区留言,有时间的话我就会回复