自动装箱与自动拆箱
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
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自动装箱与拆箱
- Java自动装箱和自动拆箱源码分析
- java之自动装箱拆箱
- Java 自动装箱和自动拆箱注意的问题
- 自动装箱与拆箱
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- java - 增强for循环 - 自动装箱/拆箱 - 可变参数 - 静态导入
- java 自动装箱和拆箱应注意的问题
- Eclipes使用,可变参数,高级For循环,基本数据自动装箱拆箱
- java自动装箱和拆箱
- Integer自动装箱、自动拆箱
- 自动装箱与自动拆箱
- Java自动装箱/拆箱
- 自动装箱与自动拆箱
- Integer自动装箱拆箱bug,创建对象在-128到127
- JDK1.5新特性:静态导入、可变参数、增强for循环、自动装箱拆箱(享元设计模式)、枚举、注解、泛型、
- java自动装箱与拆箱
- Java自动装箱与拆箱问题研究
- Java自动装箱和拆箱,包装类缓存机制和JVM调节
- Java自动装箱与拆箱