- public static void main(String[] args) {
- Integer a1 = Integer.valueOf(60); //danielinbiti
- Integer b1 = 60;
- System.out.println("1:="+(a1 == b1));
- Integer a2 = 60;
- Integer b2 = 60;
- System.out.println("2:="+(a2 == b2));
- Integer a3 = new Integer(60);
- Integer b3 = 60;
- System.out.println("3:="+(a3 == b3));
- Integer a4 = 129;
- Integer b4 = 129;
- System.out.println("4:="+(a4 == b4));
int a =200; int b =200; Integer a1 = 200; Integer b1 = 200; if(a==b){ System.out.println(true); }else { System.out.println(false); } if(a1==b1){ System.out.println(true); }else { System.out.println(false); }输出
true
false
java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
Integer b3=60,这是一个装箱过程也就是Integer b3=Integer.valueOf(60)
所以,以后碰到Integer比较值是否相等需要用intValue(), 或者Objects.equals(14,23)
对于Double没有缓冲区。
答案
1:=true
2:=true
3:=false
4:=false
总结:
基本类型(int,long)可以直接比较,
Long,Integer等 比较必须要用Objects.equals()比较
基本类型和包装类型可以直接比较,因为jvm自动做了拆装箱会把包装类型转成基本类型后进行比较