自动装箱与自动拆箱
2017-04-12 12:23
141 查看
今天说说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
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
相关文章推荐
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- 自动装箱与自动拆箱
- java基础增强--自动装箱拆箱、增强for循环、可变参数、枚举类、内省、beanUtils
- Java中的自动装箱与拆箱
- 包装类的自动装箱,自动拆箱
- 说说java的自动装箱(autoboxing)和拆箱(unboxing
- java 自动装箱与拆箱
- 自动装箱和拆箱所带来的问题(1)“==”问题
- Java 自动装箱和拆箱那些事
- 小提示——避免不必要的自动装箱、拆箱
- Java中的自动装箱与拆箱
- 自动装箱自动拆箱
- java-自动装箱与自动拆箱
- java自动装箱、拆箱——Integer细节
- jdk1.5新特性4之自动装箱和自动拆箱与享元模式
- java-自动装箱/自动拆箱/对象克隆/枚举/参数可变
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)
- JavaSE_40th_自动装箱、拆箱
- Java语法糖2:自动装箱和自动拆箱