您的位置:首页 > 其它

自动装箱与自动拆箱

2017-04-12 12:23 106 查看
今天说说Java中八大基本数据类型对应的包装类型

byte
java.lang.Byte
short                                                               java.lang.Short
int java.lang.Integer
long java.lang.Long
float java,lang.Float
double
        java.lang.Double
boolean
        java.lang.Boolean
char java.lang.Character

包装类型就是将基本数据类型包装成引用数据类型。

JDK5.0之前的

将int-->Integer(自动装箱)Integer i1 = new Integer(10);

将Integer-->int(自动拆箱)int i2 = Integer.intValue();

JDK5.0之后的

Integer i1 = 10;(自动装箱)

int i2 = i2;(自动拆箱)

接下来分宜一下这段代码:

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);

//这里不会自动拆箱
System.out.println(i1==i2);结果:false。因为双等号两边比较的是内存地址,这明显两个内存地址不一样

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);
System.out.println(i1.equals(i2));结果:true。因为Integer已经重写了Object中的equals方法

Integer i3 = 128;

Integer i4 = 128;

System.out.println(i3==i4);
结果:false。等同于Integer i1 = new Integer(10);

Integer i5 = 127;//这个程序不会在堆中创建对象,会直接从整形常量池中区去拿

Integer i6 = 127;

System.out.println(i5==i6);//true

Integer i7 = -128;

Integer i8 = -128;

System.out.println(i7==i8); //true

结果:注意一下程序(如果数据在【-128-127】之间的话,Java中引入了一个“整形常量池”,在方法区中)

所以这个明显是错误的

Integer i9 = -129;
Integer i10 = -129;
System.out.println(i9==i10); //false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据