包装类的equals()方法
错误记录:
定义全局变量使用Integer类型
但是从sql配置类查出的是String类型,
直接使用equals(),明明都是配置1,但是却不等,造成bug
代码示例:
public static void main(String[] args) {
Integer i=1;
String j="1";
System.out.println(i.equals(j));
}
//输出false
Integer源码:
//先去判断类型,再考虑是否值相等,如果类型都不相等,那么直接判false
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
扩展:instanceof
(1).一个类的实例包括本身的实例,以及所有直接或间接子类的实例
(2).instanceof左边操作元显式声明的类型与右边操作元必须是同种类或有继承关系,即位于继承树的同一个分支上,否则会编译出错
结论:以后使用equals需先注意类型