包装类

 Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

Integer 是int的包装类,

1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。 


2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如: 
Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的

Integer i = new Integer(100);

int b =i.intValue();

意思是 以 int 类型返回该 Integer 的值

String s = “123”;

int n = Integer.parseInt(s);

根据字符串去获取int类型的值

 int m = 20;

String s = Integer.toString(m);

根据int 获取string值

 int m = 12;

Integer in = m;

 //Integer类型会自动转换为int类型

自动装箱和拆箱

自动装箱 即自动将基本数据类型转化为对应的封装类型。成为一个对象以后就可以调用对象所声明的所有的方法

//声明一个Integer对象

Integer num = 10;
//以上的声明就是用到了自动的装箱:解析为
Integer num = new Integer(10);

自动拆箱:故名思议就是将对象重新转化为基本数据类型:
//装箱
Integer num = 10;
//拆箱
int num1 = num;
 Integer num1 = 297;   Integer num2 = 297;           
  System.out.println("num1==num2: "+(num1==num2));                    
  // 在-128~127 之内的数 
   Integer num3 = 97;   Integer num4 = 97;   
   System.out.println("num3==num4: "+(num3==num4)); 

打印的结果是:num1==num2: false    num3==num4: true 

java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)

为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;

以上的现象是由于使用了自动装箱所引起的,如果你没有使用自动装箱,而是跟一般类一样,用new来进行实例化,就会每次new就都一个新的对象;

这个的自动装箱拆箱不仅在基本数据类型中有应用,在String类中也有应用,比如我们经常声明一个String对象时:

String str = "sl";
//代替下面的声明方式
String str = new String("sl");

 

posted @ 2017-06-26 14:49  奋斗的渣渣  阅读(182)  评论(0编辑  收藏  举报