写在前面:
==和equals是我们面试中经常会碰到的问题。那么它们之间有什么联系和区别呢?今天我们就来聊聊吧!
典型问题
这里先抛出一些比较典型笔试问题:
int x = 10;
int y = 10;
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = "abc";
String str4 = "abc";
System.out.println(x == y); // 输出?
System.out.println(str1 == str2); // 输出?
System.out.println(str1.equals(str2)); // 输出?
System.out.println(str3 == str4); // 输出?
System.out.println(str1 == str3); // 输出?
System.out.println(str1.equals(str3)); // 输出?
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);// 输出?
System.out.println(f3 == f4);// 输出?
正文
我们通常就是说"=="用来判断两个变量之间的的值是否相等。变量又分为基本数据类型变量和引用类型。如果是基本数据类型的变量直接比较值而引用类型要比较对应的引用的内存的首地址。而equals方法 通俗来说就是用来比较两个对象长得是否一样。判断两个对象的某些特征(内容)是否一样。实际上就是调用对象的equals方法进行比较。那么我们来看看equals方法吧!
equals方法其实是属于Object类的方法。因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层实现其实就是是"=="号。
public boolean equals(Object obj) {
return (this == obj);
}
那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用"=="号的效果一样,也是比较的对象地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类,Date类,基本数据类型的包装类等。可以看哈String类的源码:
public boolean equals(Object var1) {
if (this == var1) {
return true;
} else {
if (var1 instanceof String) {
String var2 = (String)var1;
int var3 = this.value.length;
if (var3 == var2.value.length) {
char[] var4 = this.value;
char[] var5 = var2.value;
for(int var6 = 0; var3-- != 0; ++var6) {
if (var4[var6] != var5[var6]) {
return false;
}
}
return true;
}
}
return false;
}
}
解决
看了上面的描述,相信你可以做对或者回答起大多数这类的问题。但是还需要注意以下两点:
String str3 = "abc";
String str4 = "abc";
System.out.println(str3 == str4); // 输出true
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);// 输出true
System.out.println(f3 == f4);// 输出false
看到这,相信你对上面抛出的问题,已经可以迎刃而解。答案参考:
int x = 10;
int y = 10;
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = "abc";
String str4 = "abc";
System.out.println(x == y); // 输出true
System.out.println(str1 == str2); // 输出false
System.out.println(str1.equals(str2)); // 输出true
System.out.println(str3 == str4); // 输出true
System.out.println(str1 == str3); // 输出false
System.out.println(str1.equals(str3)); // 输出true
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);// 输出true
System.out.println(f3 == f4);// 输出false
有很多小伙伴找我要Linux学习路线图和视频教程,劳心伤肝的整理好了,要的伙伴,可以留言!
Linux云计算 350集全套视频教程(全家桶)https://pan.baidu.com/s/17uBDLPgzDuyZ_oRYLMbRqw
回复:Linux云计算,领取!