一. 介绍:
Java中的 "==" 是一个运算符,是用于比较两个对象地址值或基本数据类型之间的值是否相等。它的来源可以追溯到C语言,以及受C语言影响的许多其他编程语言。
Java中的equals() 是一个方法,可重写该方法用于比较两个对象属性内容是否相等的方法。该方法继承自Object类,在Java的所有类中都可以使用。
二. 区别:
1. 语法不同:
== 是运算符 C语言编写的运算符;
equals() 是Object类的方法;
2. 作用不同:
基本类型: == 是用来做值比较的,而equals()不能直接用于比较基本数据类型,需要转换为其对应的包装类型。
引用类型: == 和 equals() 都可以比较栈内存中引用的地址值是否相等 。相等为 true 否则为 false,但是通常对某个类重写equals()方法,以自定义两个对象相等的条件(Object.equals() 是比较地址)。
三. 代码展示- public class User {
- private String name;
- // 略: 构造方法、getter、setter、toString()等
- // 重写equals() 方法
- @Override
- public boolean equals(Object o) {
- if (this == o) return true; // 若地址值一致则直接返回 true
- if (o == null || getClass() != o.getClass()) return false; // 若对象为null 或者 对象非同一个类,则直接返回false;
- User user = (User) o; // 获取该对象,强转为user类
- return Objects.equals(name, user.name); // 使用equals 比较对象属性是否一致,返回结果true 或 false
- }
- // 重写hashcode方法
- @Override
- public int hashCode() {
- return Objects.hash(name);
- }
- }
- public static void main(String[] args) {
- User u1 = new User("小米");
- User u2 = new User("小米");
- // 比较地址值
- System.out.println(u1 == u2);
- // 比较对象内容
- System.out.println(u1.equals(u2));
- }
- 输出结果:
- false
- true
复制代码
从代码上可以看出来在new 新对象后,地址值是发生改变的,通过 == 运算符 或者 原生Object.equals() 方法,是不能判断对象的属性的,所以需要在该类重写equals()方法,使自定义类比较其值是否相等。
完
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |