【JAVA面试题】equals 与 == 的区别

这篇博客详细探讨了Java中equals方法和==运算符的区别。内容包括基本介绍、判断类型的不同以及判断细节。==用于比较基本类型值或引用类型的地址,而equals方法默认在Object类中比较对象地址,但在子类中通常被重写用于比较对象内容。通过实例展示了引用类型和基本类型的比较结果,揭示了两者在比较字符串和自定义对象时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)基本介绍

 == :是一个比较运算符,检查两个操作数的值是否相等,如果相等则条件为真

equals() : 方法用于判断 Number 对象与方法的参数进是否相等

2)判断类型不同

 == :可以判断基本类型,也可以判断引用类型

equals : 只能判断引用类型

3)判断细节

== 判断细节:

== 如果判断基本类型的话是比较两个值是否是相等的(byte,short,int,long....),如果是判断引用类型的话是判断两个值是否指向同一个对象(也就是地址是否相同)

equals 判断细节:

是Object类的方法,只能判断引用类型,在Object类中为判断两个地址(指向对象)是否相同,但子类会重写父类方法,用于判断值是否相同

4)案例演示

new两个object对象,o1与o2,由于两个都是引用类型,用等号 == 进行比较,比较两者地址是否相同,equals方法也是一样,因此输出两个false.

    public static void main(String[] args) {
     //   String s = new String("java");
      //  String s1 = new String("java");
      //  int bb = 1;
      //  int aa = 1;
        Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1 == o2);
        System.out.println(o1.equals(o2));


        }

 new两个String对象,s1与s2,由于两个都是引用类型,用等号 == 进行比较,比较两者地址是否相同,此时两个指向的地址不是同一个,返回false,此时equals方法是重写了父类Object的方法,用来比较两个值是否相等,此时输出的是true.

    public static void main(String[] args) {
     String s1 = new String("java");
     String s2 = new String("java");
      //  int bb = 1;
      //  int aa = 1;
       // Object o1 = new Object();
       // Object o2 = new Object();
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));


        }

 

定义两个变量,aa,bb 由于两个都是基本数据类型,用等号 == 进行比较,比较两者值是否相同,返回true,此时equals方法并无法判断基本数据类型,所以运行将会报错

    public static void main(String[] args) {
    // String s1 = new String("java");
     //String s2 = new String("java");
       int bb = 1;
       int aa = 1;
       // Object o1 = new Object();
       // Object o2 = new Object();
        System.out.println(aa == bb);
        System.out.println(aa.equals(bb));  //此时报错


        }

 

### Java 中 `equals` 方法 `==` 运算符的区别Java 编程语言中,`equals()` 方法用于比较两个对象的内容是否相等,而 `==` 运算符则用来判断两个引用变量是否指向同一个内存地址。 对于基本数据类型的比较: - 使用 `==` 来直接对比数值大小。 对于对象类型的数据比较: - 如果使用 `==` ,那么是在检查这两个对象实例是否完全相同,即它们是否位于同一位置存储于堆空间内[^1]。 - 当调用 `equals()` 方法时,默认情况下它会执行 `==` 类似的操作;但是通常建议重写此方法以便能够基于实际属性来评估逻辑上的平等关系。例如,在 String Wrapper 类(Integer, Double 等)中已经实现了合理的 `equals()` 行为[^2]。 下面是一个简单的例子展示两者的不同之处: ```java String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false, because they are different objects in memory. System.out.println(s1.equals(s2)); // true, since content of both strings is same. // For primitive types like int or char '==' compares their values directly int num1 = 5; int num2 = 5; System.out.println(num1 == num2); // true as integers have equal value here. ``` 当准备面向对象编程的面试题目时,关于 `equals` 对比 `==` 的常见问题可能包括但不限于以下几点: - 解释为什么即使字符串具有相同的字符序列,`==` 返回的结果可能是 `false`. - 描述如何正确地覆盖 `Object` 类中的 `equals(Object obj)` 方法以确保其遵循通用约定。 - 讨论如果自定义类未适当覆写 `equals()` 可能引发的问题以及解决方案。 - 探讨哈希表结构如 `HashMap`, `HashSet` 如何依赖 `equals()` `hashCode()` 方法来进行键查找并保持唯一性约束[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值