== 与 equals 的区别?
一. 介绍:
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()方法,使自定义类比较其值是否相等。
完