经典面试题 == 和equery的区别
前言
2020/11/23,正在加班的我想要去专研一下面试题,为了能给自己动力所以就突然想要写博客取记录自己的成长,然后成为一条咸鱼专心追热巴!!!
第一个面试题是什么呢?
== 和equals的区别(一个基础题,送上拙见)
先来看一下其余大佬写的一些理解
1、== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)
2、equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 为一个引用
String b = new String("ab"); // b为另一个引用,对象的内容一样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,非同一对象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
首先 最明显的区别就是 == 不能比较对象是否相等,而equals()却可以,那么是为什么呢?
上源码
public boolean equals(Object anObject) {
//可以看到这里开头就用到 == 去进行判断,也就是equals可以说是 == 的一种扩展,当 == 能进行判断的时候就使用==进行判断,否则就接着向下走
if (this == anObject) {
return true;
}
//先去判断类型是否是String型
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;
}
看完这个能看出equals是 == 的一种“扩展”(但是整形不能使用equals),equals底层也是使用 == 去进行比较,
总结
1、== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;
而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,
比如 String、Integer 等把它变成了值比较,
所以一般情况下 equals 比较的是值是否相等。
2、 ==是一个运算符 而 equals()是一个方法,所以equals()可以被重写,可扩展型比较强。
3、如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址
本文地址:https://blog.csdn.net/weixin_44994494/article/details/110005623
上一篇: 学习进阶之路总结
下一篇: [网络] 使用wireshark抓包数据