对课程id和班级id分别进行判断,如果分别一致就更新该课程班班级信息,拖过不一致就插入新的一条数据。由于这里使用将两个类型不一致的变量使用equals进行比较,结果肯定为false,导致会插入相同课程班级的数据,从而导致数据混乱。
上面出现的问题主要原因是对于equals的使用有误,不清楚如何使用equals导致出现的问题。下面让我们来看一下如何正确的使用equals以及使用equals的一些技巧。
public boolean equals(Object obj) {return this == obj;}
public boolean equals(Object obj) {//如果指定对象是Integer类型,则继续if (obj instanceof Integer) {//则先将该对象强转为Integer对象,比较内容return this.value == (Integer)obj;} else {return false;}}
主要依据阿里规约中对于equals使用的注意事项
基本数据类型与其对应的包装类型
基本数据类型 | 对应的包装类型 |
---|---|
byte(整数类型) | Byte |
short(整数类型) | Short |
int (整数类型) | Integer |
long(整数类型) | Long |
float(浮点类型) | Float |
double(浮点类型) | Double |
char(字符类型) | Character |
boolean | Boolean |
Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
所有整型包装类对象之间值的比较,全部使用 equals 方法比较。
说明:对于 Integer var = ? 在 -128 至 127 之间的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对
象,这个区间内的 Integer 值可以直接使用 == 进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复
用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
public class Client {public static void main(String[] args) {Integer a =128;Integer b=128;Integer c=127;Integer d=127;System.out.println(a.equals(b));System.out.println(a==b);System.out.println(c==d);}
可以使用BigDecimal来定义值,再进行浮点数的运算操作。
public static void main(String[] args) {BigDecimal a = new BigDecimal("1.0");BigDecimal b = new BigDecimal("0.9");BigDecimal c = new BigDecimal("0.8");BigDecimal x = a.subtract(b);BigDecimal y = b.subtract(c);if (x.compareTo(y) == 0) {System.out.println("true");}}
上一篇:Linux - 环境变量
下一篇:法国海运 法国海运主要港口有哪些