Java中的valueOf问题,划线部分为什么结果不是false?
public class WrapperClassCompare {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = Integer.valueOf(6);
System.out.println("6的包装类实例是否大于5.0:"+(a>5.0));
System.out.println("比较两个包装类的实例是否相等:"+(Integer.valueOf(2) == Integer.valueOf(2)));
Integer ina = 2;
Integer inb = 2;
System.out.println("两个2自动装箱后是否相等:"+(ina==inb));
Integer biga = 128;
Integer bigb = 128;
System.out.println("两个2自动装箱后是否相等:"+(biga==bigb));
System.out.println(Boolean.compare(true, false));
System.out.println(Boolean.compare(true, true));
System.out.println(Boolean.compare(false, true));
}
}
划线语句应该是相当于在堆中创建两个对象,双等号比较地址值。地址值不同,我认为结果是false.
原因应该是:包装类型会调用valueOf方法,将运算符两边的对象都转换为基本类型后再做比较。这就是为何“==”不能使用而“<”、“>”、“<=”、“>=”这几个符号可以使用的原因。(引用自下面的链接)
参考链接:
java基础之Integer比较问题_幼儿园里的山大王的博客-CSDN博客_java比较两个integer