包装类 (Java)

包装类

​ JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。

​ 比如:集合的操作中。例如使用Map对象要操作put()方法时,需要传入的参数对象而不是基本数据类型。为了解决这个不足,在设计类时为每个 基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class) 。

​ 包装类均位于 java.lang 包,包装类和基本数据类型的对应关系如下表所示:

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

int转化成Integer对象

Integer int1 = new Integer(10);   // 构造方法
//在jdk9中已经废弃了 Integer int2 = Integer.valueOf(20); 

//可以自动装箱
Integer int1 = 10;

Integer对象转化成int

Integer int1 = 10;
int a = int1.intValue(); 

//可以自动拆箱
int a = int1

字符串转化成Integer对象

 Integer int3 = Integer.parseInt("334"); 
 Integer int4 = new Integer("999");    // 构造方法

Integer对象转化成字符串

String str1 = int3.toString(); 

一些常见int类型相关的常量

System.out.println("int能表示的最大整数:"+Integer.MAX_VALUE);
// 运行结果:
int能表示的最大整数:2147483647
自动装箱与拆箱

自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。

自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再 去调用intValue()和doubleValue()方法。

​ 自动装箱与拆箱的功能事实上是编译器来帮您的忙,编译器在编译时期依您所编写的语法,决定是否进行装箱或拆箱动作。

自动装箱与拆箱的注意点

​ 所以自动装箱与拆箱的功能是所谓的 “编译器蜜糖”(Compiler Sugar) ,虽然使用这个功能很方便,但在程序运行阶段您得了解Java的语义。例如下面的程序是可以通过编译的:

Integer i = null; 
int j = i; 

​ 这样的语法在编译时期是合法的,但是在运行时期会有错误,因为这种写法相当于:

Integer i = null; 
int j = i.intValue();

​ null 表示 i 没有参考至任何的对象实体,它可以合法地指定给对象参考名称。由于实际上 i 并没有参考至任何的对象,所以也就不可能操作 intValue() 方法,这样上面的写法在运行时会出现 NullPointerException 错误。

缓存

自动装箱拆箱时,对于-128-127之间的值,编译器仍然会把它当做基本类型处理。

public class test2 {
    public static void main(String[] args) {
        System.out.println("------在缓存范围内比较--------");
        Integer a1 = 127;
        Integer a2 = 127;
        Integer a3 = new Integer(127);
        System.out.println(a1==a2);
        System.out.println(a2==a3);

        System.out.println("------在缓存范围外比较--------");
        Integer a4 = 128;
        Integer a5 = 128;
        Integer a6 = new Integer(127);
        System.out.println(a4==a5);
        System.out.println(a5==a6); 
  
    }
}
//运行结果:
------在缓存范围内比较--------
true
false
------在缓存范围外比较--------
false
false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值