您的位置:首页 > 其它

Integer的自动装箱以及Int比较

2016-04-27 13:39 417 查看
自己写了一点例子来区分

//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则说明了自动拆箱机制,即基本数据类型和对象比较的时候,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: