Java包装类

来源:互联网 发布:我国农产品出口数据 编辑:程序博客网 时间:2024/06/05 02:58

为什么有了基本类型还要有包装类型?

Java是一个面相对象的编程语言,但基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。比如,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

基本类型和包装类型

基本数据类型

包装类

byte

Byte

boolean

Boolean

short

Short

char

Character

int

Integer

long

Long

float

Float

double

Double



基本类型和包装类型的区别

1.基本类型直接使用赋值的方式,如int a=1;而包装类型使用new的方式创建,如 new Integer(1)。
2.基本类型是存在内存中的栈,而包装类型是引用类型,会把new出来的对象存在堆中,我们通过引用来使用对象。
3.基本类型的默认值为0,false等,而包装类型的默认值则是null。

自动拆箱和自动装箱(jdk5)


自动装箱-boxing
基本类型就自动地封装到与它相同类型的包装中,如:
Integer i = 100;
本质上是,编译器编译时为我们添加了:
Integer i = Integer.valueOf(100);
自动拆箱autounboxing
包装类对象自动转换成基本类型数据。如:
int  a= new Integer(100);
本质上,编译器编译时为我们添加了:
int  a= new Integer(100).intValue();


基本类型和字符串之间的转化(前提是字符串是数字形式,否则会报异常)

1.字符串转基本类型
int a= Integer.parseInt(11);
2.基本类型转字符串
String str= Integer.toString(123);

关键点:
Integer integer1 = new Integer(123);Integer integer2 = new Integer(123);System.out.println(integer1 == integer2); //trueSystem.out.println(integer1.equals(integer2));//true

Integer源码中有一个IntegerCache内部类,内部定义了一个Integer对象数组,存储的是-128~127范围内的值。
第一行代码,创建了一个值为123的Integer对象,第二行代码执行时会先判断123是不是符合IntegerCache内部类中定义的数组范围,如果符合,并且缓存中有这个数,就直接在缓存中取出上次创建的,否则再重新创建,所以两个情况都为true。如果将123 改成1234则第一个为false,第二个为true,因为创建的值已经超出了范围没有放在缓存里。

总结:

无论如何,Integernew Integer不会相等。不会经历拆箱过程,new Integer的引用指向堆,而Integer指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false

两个都是非new出来的Integer,如果数在-128127之间,则是true,否则为false。 j
两个都是new出来的,都为false
intinteger(无论new)比,都为true,因为会把Integer自动拆箱为int再去比


原创粉丝点击