一、"=="
1.对于基本数据类型==用于比较两个变量的值是否相等
int i = 2;
int j = 3;
System.out.println(i == j);
结果输出:false
2.对于引用数据类型==用于比较二者是否指向同一对象(存储的内存地址是否相同)
Student john = new Student("john");
Student tomy = new Student("tomy");
System.out.println(john == tomy); // false
结果输出:false
3.我们来看一下Object中equals的源码
public boolean equals(Object obj) {
return (this == obj);
}
通过源码我们可以看出在Object中==与equals作用相同,都是用于比较指向的对象是否相同
我们再来看一下String类中的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;//将上转型对象下转型
int n = value.length;//返回调用此方法的String对象组成的char数组的长度
if (n == anotherString.value.length) {//比较两个String对象组成的字符数组长度是否相同
char v1[] = value;//将String对象的每个字符转换成char数组
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])//挨个对比
return false;
i++;
}
return true;
}
}
return false;
}
String中对equals方法进行了重写,在这个类中equals方法用于比较两个字符串内容是否相同
二、实例
String name1 = "jim";
String name2 = "tim";
System.out.println(name1.equals(name2));
Test test = new Test();
System.out.println(name1.equals(test));
String name3 = new String("jim");
System.out.println(name1.equals(name3));
输出结果:false
false
true
根据输出结果我们可以得出在String类中重写的方法用于比较两个字符串内容是否相同,第一步先检查地址,然后再对内容进行挨个对比
三、总结
==可以用于比较基本类型的值是否相等,或者用于比较引用类型的变量是否指向同一对象;equals
是Object
类中的方法,默认与==
行为一致,但可以通过重写的方法实现自定义的规则比较,常用的类中String类的equals方法用于比较内容是否相同。