java--包装类

目录

1、包装类的定义

2、意义

3、八大基本类型的包装类

4、转换

5、自动拆箱和自动装箱

6、面试问题:请阐述128陷阱以及出现的原因


1、包装类的定义

        把基本类型包装--包装类

2、意义

        1、在面向对象中,“一切皆为对象”,但是基本类型不是不符合这一理念,为了统一此理念,为基本类型包装成引用类型的数据

        2、基本类型对应的包装类型,除了可以满足基本类型的基本需求,还额外附加了丰富的能力,比如:涉及类型间的转换,数据类型间的基本操作(四舍五入等)

3、八大基本类型的包装类

基本类型

包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

4、转换

     Integer 为例:

基本类型与包装类的转换就是拆箱装箱的过程

        Integer 为例:

                int ------->Integer (装箱)

                Integer ------->int(拆箱)

1、int -->Integer:   这样就可以使用Integer的方法 a1 点 就可以使用  a 点 就不行

        使用Integer 的构造方法 参数为整形

int a = 10;
Integer a1 = new Integer(a);
//补充:使用Integer.valueOf()
int a = 10;
Integer  a1 = Integer.valueOf(a);

2、Integer-->int:

        使用Integer 中的intValue()方法,返回值类型为 int

Integer  a1 =12;
int b = a1.intValue();

3、Integer-->String

        使用Integer 中的toString()方法,返回值类型为String

Integer  a1 =12;
String s = a1.toString();

4、String-->Integer

        使用Integer 的构造方法 参数为String,

        注意 s字符串的内容只能为数字

String a = "12234";
Integer s1 = new Integer(s);

5、int-->String

        使用String中的valueOf()方法返回值类型为String

int a = 10;
String b = String.valueOf(a);

6、String-->int

        使用Integer 的parseInt()方法

String a = "12234";
int b = Integer.parseInt(a);

总结:其它类型 转 包装类,只需要使用包装类的构造方法,参数不同而已

包装类中有 自身 转成 各种类型 的方法,直接使用即可

5、自动拆箱和自动装箱

        Java之前,基本类型和包装类型的转换是需要手动进行的,从java5之后开始提供自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)

        自动装箱

int a = 10;

Integer  a1 = a;

        自动拆箱

Integer b = new Integer(23);

int bb = b;

6、面试问题:请阐述128陷阱以及出现的原因

		Integer num1 = 100;
		Integer num2 = 100;
		System.out.println(num1==num2);
		----true
		Integer num3 =128;
		Integer num4 =128;
		// byte 范围内:-128----127  相等  超过了就不相等
	    System.out.println(num3==num4);
        ----false

解释:

//因为是自动装箱 Integer num3 =128;
//默认使用的是 Integer ss =  Integer.valueOf(11);
//valueOf方法如下:
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
}

        这个方法的传参在一定范围内会返回参数值,即默认创建了一个数组,如果在范围内直接使用即可,但是如果超出范围就会new 一个返回,就会新建一个地址,而 == 是比较地址 所以会返回false

        原因:Integer 的valueOf()方法,如果数值在 -128--127 之间的数据都存储在一个catch数组中,该数组相当于一个缓存,当我们在 -128 --127 之间自动装箱的时候,程序会直接返回该值在数组的中内存地址,所以在 -128--127 之间的数值用 == 进行比较是相等,而不在这个区间的数,需要新开辟一个内容空间,所以不相等

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值