== 与 equals 的区别?

农民  金牌会员 | 2023-7-10 22:43:10 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

一. 介绍:
   Java中的 "=="  是一个运算符,是用于比较两个对象地址值或基本数据类型之间的值是否相等。它的来源可以追溯到C语言,以及受C语言影响的许多其他编程语言。
   Java中的equals() 是一个方法,可重写该方法用于比较两个对象属性内容是否相等的方法。该方法继承自Object类,在Java的所有类中都可以使用。
 
二.  区别:
   1. 语法不同:
     == 是运算符 C语言编写的运算符;
     equals() 是Object类的方法;
 
   2. 作用不同:
    基本类型: == 是用来做值比较的,而equals()不能直接用于比较基本数据类型,需要转换为其对应的包装类型。
    引用类型: == 和 equals() 都可以比较栈内存中引用的地址值是否相等 。相等为 true 否则为 false,但是通常对某个类重写equals()方法,以自定义两个对象相等的条件(Object.equals() 是比较地址)。
 
三. 代码展示
  1. public class User   {
  2.     private String name;
  3. // 略: 构造方法、getter、setter、toString()等
  4. // 重写equals() 方法
  5.     @Override
  6.     public boolean equals(Object o) {
  7.         if (this == o) return true;  // 若地址值一致则直接返回 true
  8.         if (o == null || getClass() != o.getClass()) return false;  // 若对象为null 或者 对象非同一个类,则直接返回false;
  9.         User user = (User) o;  // 获取该对象,强转为user类
  10.         return Objects.equals(name, user.name); // 使用equals 比较对象属性是否一致,返回结果true 或 false
  11.     }
  12. // 重写hashcode方法
  13.     @Override
  14.     public int hashCode() {
  15.         return Objects.hash(name);
  16.     }
  17. }
  18.     public static void main(String[] args) {
  19.         User u1 = new User("小米");
  20.         User u2 = new User("小米");
  21.         // 比较地址值
  22.         System.out.println(u1 == u2);
  23.         // 比较对象内容
  24.         System.out.println(u1.equals(u2));
  25.     }
  26. 输出结果:
  27.     false
  28.     true
复制代码
    
  从代码上可以看出来在new 新对象后,地址值是发生改变的,通过 == 运算符 或者 原生Object.equals() 方法,是不能判断对象的属性的,所以需要在该类重写equals()方法,使自定义类比较其值是否相等。
 
 

  
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表