Java中的包装类

引用类型的变量只能存储对象,八种基本类型不能直接存储在引用类型中。为了Object类统一管理所有的类型,java提供了包装类的概念。

包装类:八种基本数据类型分别定义了相对应的对象类型。

基本数据类型

byte

short

char

int

long

boolean

float

double

包装类型

Byte

Short

Character

Integer

Long

Boolean

Float

Double

 

包装类的作用:List等集合只能接受一个引用类型的数据,即一个对象。所以一个值类型会有一个对应的包装类型。

包装类还有一个重要的功能,就是适配器。 比如将String类型转换为一个int类型的数据。

包装类可以区分0和null;即有效数据和无效数据。

 

一:Number类    

抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类。

Number 的子类必须提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法。

因此,Byte、Double、Float、Integer、Long 和 Short 这六种包装实现了如下基本方法。


二:包装类的API

以Integer类为例:

①静态属性:

 

我们可以通过Integer.MAX_VALUE或Integer.MIN_VALUE的形式查看每种数值基本数据类型的最大值与最小值。

 

②如何创建一个Integer对象

1:首先可以通过构造方法

 

我们通常采用第一种方式构造 一个Integer类的对象。若以第二种方式,若字符串不能成功转换为 Integer类型的对象会报错。

Integer i=new Integer(11);

 

2:通过Integer的静态方法。

 

Integer i=Integer.valueOf(11);

JDK1.5中,Integer i=15;//会自动完成装箱操作,调用的就是Integer.valueOf();方法

 

③常用方法

将字符串转换为int数据类型的变量。

 

 

将Integer类的对象转为字符串  toString();

④Integer特有的方法

将正整数转换相对应的二进制、八进制、十六进制。

 


三:整数包装类的缓冲区

测试案例:

public class TestBasic {

public static void main(String[] args) {

Short s1=127;//  默认调用Short.valueOf();方法

Short s2=127;

System.out.println(s1==s2);//结果 true

 

Short s3=128;

Short s4=128;

System.out.println(s3==s4);//结果false

}

}   


包装类默认调用    Short.valueOf();的源代码:

public static Short valueOf(short s) {

        final int offset = 128;

        int sAsInt = s;

        if (sAsInt >= -128 && sAsInt <= 127) { // must cache

            return ShortCache.cache[sAsInt + offset];

        }

        return new Short(s);

    }


//Short包装类中的静态内部类源代码

private static class ShortCache {

 private ShortCache(){}

 static final Short cache[] = new Short[-(-128) + 127 + 1];

 static {

            for(int i = 0; i < cache.length; i++)

                cache[i] = new Short((short)(i - 128));

        	}

}

 明确一点:         == 两边如果是基本数据类型,比较数值。
  == 两边如果是引用数据类型,比较地址。

整数包装类(Integer、Byte、Short、Long)利用静态内部类对常用数值-128~127 进行缓冲  (内部类为外部类提供必要的功能组件) 缓冲256个包装类的对象在上千万的高并发程序中  缓冲的开销是值得的。

因此创建整数包装类对象的数值位于 -128~127中,它们的地址必然相同。如果数值不在此区间,则执行new对象操作,地址不同。




                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值