包装类速通(java)

文章目录

大一牛马一只,写博客主要方便复习,建议先看视频,再找博客看,学习效果好一点,很多源码没去追,大家可以自己追源码学习一下。有错误的话,欢迎评论区暴打我

拆箱装箱

装箱:基本类型 ——> 包装类型
拆箱:包装类型 ——> 基本类型

jdk 5之前需要手动拆箱装箱

int a = 100;
Integer i1 = new Integer(a); //装箱第一种方法
Integer i2 = Integer.valueOf(a); // 装箱第二种方法

int a2 = i1.intValue(); //拆箱 注意 intValue这个int其他包装类要改

jdk 5(包括5)之后自动拆箱装箱

int n2 = 100;;
Integer  i1 = n2; //自动装箱 底层:Integer.valueOf(n2)
int n3 = i1; //自动拆箱 底层:i1.intValue()


要点

三元运算符

Object obj1 = true ? new Interger(1) :  new Double(2.0);

这里直接 true 执行 new Integer(1) ,但是三元运算符是一个整体,后面又Double 要类型提升,所以 obj1 = 1.0;


包装类转 String

  • 第一种方法
 Integer i = 100;
 String s1 = i + ""; // 利用 字符串 + 号性质直接变字符串
  • 第二种方法
Integer i = 100;
String s1 = i.toString();
  • 第三种方法
Integer i = 100;
String s1 = String.valueOf(i);

比较问题

  • 注意堆区
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);

可以看到这里有 new i 和 j 指向两个不同的堆空间,==对于引用类型要比较的是地址,所以输出 false


  • 注意底层
Integer i = 1; 
Integer j = 1;
System.out.println(i == j);

前面说过 这种自动装箱底层是 Integer.valueOf(1);所以比较的时候我们要追一下源码分析一波,可以发现源码意思是:如果是 -128 ~ 127 会被缓存,在这个范围内,指向的都是内存中相同的实例。没在这个范围就直接创建对象返回,这里两个哦都是 1 直指向相同实例, 所以这里是 true,

请添加图片描述


  • 有基本数据类型
Integer i = 200;
int j = 200;
System.out.println(i == j);

如果是有基本数据类型直接比较值是否相等



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值