package com.tmt.test_code;
public class ZhuangChaiXiiangTest {
public static void main(String[] args) {
Integer i1=new Integer(128);
int i2=128;
Integer i3=new Integer(128);
Integer i4=128;
Integer i44=128;
Integer i5=127;
Integer i55=127;
Long i6 = 127L;
Long i66 = 127L;
Long i7 = 128L;
Long i77 = 128L;
Integer a = 1;
Integer b = 2;
Long c = 3L;
System.out.println("---new Integer(128) == int 128 ---"+(i1==i2));
System.out.println("---new Integer(128) == new Integer(128)---"+(i1==i3));
System.out.println("---Integer 127 == Integer 127---"+(i5==i55));
System.out.println("---Integer 128 == Integer 128---"+(i4==i44));
System.out.println("---Long 127L == Long 127L--"+(i6==i66));
System.out.println("---Long 128L == Long 128L--"+(i7==i77));
System.out.println("3L.equals(integer 1 + integer 2)--"+c.equals(a+b));
System.out.println("3L == (integer 1 + integer 2)--"+(c == (a+b)));
}
}
这个的运算结果是什么呢?
---new Integer(128) == int 128 ---true
---new Integer(128) == new Integer(128)---false
---Integer 127 == Integer 127---true
---Integer 128 == Integer 128---false
---Long 127L == Long 127L--true
---Long 128L == Long 128L--false
3L.equals(integer 1 + integer 2)--false
3L == (integer 1 + integer 2)--true
大家也许要问原因了:
---new Integer(128) == int 128 ---true
基本数据类型和对象间的“==”,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址
---new Integer(128) == new Integer(128)---false
对象间的“==”是比较两者在内存中的地址
---Integer 127 == Integer 127---true
---Integer 128 == Integer 128---false
---Long 127L == Long 127L--true
---Long 128L == Long 128L--false
Integer与Integer间的"=="比较,从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,但是超过byte范围还是会新建的对象
3L.equals(integer 1 + integer 2)--false
equals方法不处理类型间的转换
3L == (integer 1 + integer 2)--true
包装类的“==”运算在遇到算术运算的情况下会自动拆箱