1. ==
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等。
int a=10;
int b=10;
System.out.println(a==b); //结果为true
如果作用于引用类型的变量,则比较的是所指向的对象的地址。
String s1="abc"; //将abc放入字符串常量池
String s2="abc"; //当再创建同样的字符串时,发现常量池中有则直接使用
System.out.println(s1==s2); //结果为true 变量s1和s2指向同一个字符串abc 地址相同
2.equals()
equals方法不能作用于基本数据类型的变量
equals继承Object类,如果没有对equals()进行重写,则比较的是引用类型的变量所指向的对象的地址。
但是如果对equals()进行重写,诸如String、Date等类对equals方法进行了重写,比较的是所指向的对象的内容是否一样。
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3.equals(s4)); //内容相同 结果为true
3.String类中equals()函数的执行过程。
1)判断引用值是否相等,相等即返回true,不用往下走;
2)判断类型是否匹配,类型相同,长度相等,逐个比较字符是否一样,完全符合,则返回ture,一旦不对,返回false;
3)类型不匹配,返回false。
public boolean equals(MyString str){ //重写String中的equals方法 这里的MyString就是String类型
if(str==null){
return false;
}
if(this==str){ //传进来的和自身相比
return true;
}
int n=this.value.length;
if(n==str.value.length){ //长度相等
for (int i=0; i<this.value.length;i++){
if(this.value[i]!=str.value[i]){ //判断每一位是否对应相等
return false;
}
}
return true;
}
return false;
}