Integer的自动装箱以及Int比较

来源:互联网 发布:finale打谱软件汉化版 编辑:程序博客网 时间:2024/06/03 18:17

自己写了一点例子来区分

//1

Integer i =3;
Integer i2=3;
System.out.println(i==i2);//true
//2
Integer i3=128;
Integer i4 = 128;
System.out.println(i2==i3);//false
//3
Integer i5=127;
Integer i6 = 127;
System.out.println(i5==i6);//true
//4
int i7=3;
int i8=3;
System.out.println(i7==i8);//true
//5
int i9=300;
int i10=300;
System.out.println(i9==i10);//true
//6
Integer i11 = new Integer(3);
Integer i12 = new Integer(3);
System.out.println(i12==i11);//false
//7
int i13 = 3;
System.out.println(i11==i13);//true



以上列举了7种情况的比较,如我们所知,在java里==号比较的是内存地址是否相同,即是否为同一个对象。

第一二三种情况为了说明Integer与Integer间的比较,从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,但是超过byte范围还是会新建的对象,


第4,第5种情况则说明像int这样的基本类型==比较的只是值是否相同,这里说明下String类型在==比较上也有区别,大家可以另行百度下


第6种情况则输出false,则说明==比较的确实是内存地址,Integer对象new出来以后是在堆里。


第7种情况输出true则说明了自动拆箱机制,即基本数据类型和对象比较的时候,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址。




0 0
原创粉丝点击