
== 和 equals() 是 Java 中两个用于比较对象是否相等的操作符和方法。它们的区别主要有以下几点:
== 是一个运算符,而 equals() 是一个方法。
Java数据对象类型分为两大类:基本类型和引用类型。== 比较的对象可以是基本类型也可以是引用类型。

而 equals()不能用于判断基本数据类型的变量,比较的是引用类型的对象。可以看到x变量为基本的int类型,是不能使用equals的。
Java 数据类型分为两大类:基本类型和引用类型。
1)基本类型
基本类型是 Java 语言中内置的类型,包括整数类型、浮点类型、字符类型、布尔类型等。基本类型的对象是原始的,不能被修改。
2)引用类型
引用类型是 Java 语言中用户自定义的类型,包括类、接口、数组等。引用类型的对象是可变的,可以被修改。
1)==针对基本类型时比较的是对象的值,针对引用类型比较的是对象的指向的内存地址是否相等。
2)equals针对的比较对象是引用类型, 在Java中Object对象是所有对象的父类,所以每个类都会有个equals的方法,如果你没有重写它那些它与==的效果是一样的,可以通过源代码查看。

如果你重写了它,那么就是你自己定义的比较逻辑。比如String类型它就重写了equals方法(也就是判断对象的值是否相等而不是内存地址)。
String中的equals先用==判断是否相等,相等直接返回true->再判断是否为string类型,否直接返回false->是则继续判断对象length->循环判断char是否相等(jdk8使用的是char,高版本的jdk已使用效率更高的byte)

以下是一些例子:
- int x = 10;
- int y = 10;
-
- // 比较基本类型
- System.out.println(x == y); // true
- System.out.println(x.equals(y)); //代码会报错,不能使用equals
-
- // 比较引用类型
- String str1 = new String("Hello");
- String str2 = new String("Hello");
-
- // 默认情况下,equals() 比较引用
- System.out.println(str1 == str2); // false
- System.out.println(str1.equals(str2)); // true
-
- // 重写 equals() 方法
- class MyObject {
- private int id;
-
- public MyObject(int id) {
- this.id = id;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof MyObject) {
- MyObject other = (MyObject) obj;
- return this.id == other.id;
- }
- return false;
- }
- }
-
- MyObject object1 = new MyObject(1);
- MyObject object2 = new MyObject(1);
-
- // 重写 equals() 方法后,equals() 比较内容
- System.out.println(object1 == object2); // false
- System.out.println(object1.equals(object2)); // true
在实际开发中,应该根据实际需求来选择 == 还是 equals() 来比较对象是否相等。如果需要比较对象的引用,则可以使用 ==。如果需要比较对象的内容,则可以使用 equals()。
问题1:equals 和 == 之间的主要区别是什么?
答案:
问题2: 如何自定义一个类的equals方法?
答案: 要自定义一个类的equals方法,可以按照以下步骤进行:
问题3:equals 和 hashCode 之间有什么关系?
答案:
问题4:== 在哪些情况下比较的是对象内容而不是引用?
答案: