一:背景介绍
在判断课程id和班级id的时候,如果类型一致就会更新课程信息,如果类型不一致就会插入一条新的数据。其实两个变量的值是一致的,只不过数据类型不一致,从而导致了,在判断的时候结果为false,就会往库中插入一条相同课程班级的数据。结果数据发生了混乱的情况。
二:分析equals()方法
Object类中的equals()方法用于检测一个对象是否等于另外一个对象
equals()语法
public boolean equals(Object obj) { return (this == obj); }
在Object类中,equals方法判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,则返回true,否则返回false。
equals()重写规则
- 自反性:对于任何非空引用x,x.equals(x)应该返回true
- 对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true
- 传递性:对于任何引用 x、y 和 z ,如果 x.equals(y) 返回 true,y.equals(z)返回true, x.equals(z) 也应该返回 true。
- 一致性:对于任何引用 x、y 和 z ,如果 x.equals(y) 返回 true,y.equals(z)返回true, x.equals(z) 也应该返回 true。
- 非空性:对于任意非空引用x,x.equals(null)应该返回false。
String类对equals重写
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
三:验证equals()方法过程
package com.wangsiqi.equals; /** * @BelongsProject: 反射的使用 * @BelongsPackage: com.wangsiqi.equals * @Author: wangsiqi * @Description: 数据类型不一致导致equals判断为false * @CreateTime: 2023-03-16 14:21 * @Version: 1.0 */ public class DataType { public static void main(String[] args) { Long one = 123L; String two = "123"; String three = "123"; System.out.println("类型不一致" + one.equals(two)); System.out.println("类型一致" + two.equals(three)); } }
从执行结果来看,类型不一致会导致调用equals方法为false
四:总结
- equals方法不能作用于基本数据类型的变量
- 如果没有对Object中equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容