欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

经典面试题 == 和equery的区别

程序员文章站 2022-06-09 20:41:05
前言2020/11/23,正在加班的我想要去专研一下面试题,为了能给自己动力所以就突然想要写博客取记录自己的成长,然后成为一条咸鱼专心追热巴!!!第一个面试题是什么呢?== 和equals的区别(一个基础题,送上拙见)先来看一下其余大佬写的一些理解1、== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)2、equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1...

前言

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

相关标签: 面试 java