什么是包装类?

写写我的想法

就是对于对象和基本类型的无法匹配和强转,基本类型在面向对象的实例类型中,反而成了个特殊的数据类型的存在

在一些特定的情况,我们希望通过对象的方式去处理数据,但是基本类型的数据没有像Object的方法可以使用

所以设计者对所有的基本数据类型进行了封装处理,可以说包装类也称为封装类

父类Number

基本类型  对应的封装类

boolean Boolean

byte   Byte

char   Character

short   Short

int    Integer

long  Long

float  Float

double  Double

有了类的特点,就可以像对象一样操作了

基本类型  ->  引用类型

    @Test
public void test1(){
// 基本数据类型 转换 包装类 int i = 20;
Integer integer = new Integer(i); // 默认自动装箱 自动封装 // 或者直接入参
Integer integer1 = new Integer(100); // 支持了字符串入参 如果格式不符合,抛出 NumberFormatException 数值格式异常
Integer integer2 = new Integer("23134");
}

引用类型  ->  基本类型

    @Test
public void test1(){
// 包装类 转换 基本数据类型 Integer integer = new Integer(100); // intValue(); 转换返回基本类型值
int value = integer.intValue(); // 已经自动拆箱处理了
}

现在已经是自动装箱拆箱了

@Test
public void test1(){
Integer integer = 100; // 自动装
int value = integer ; // 自动拆
}

对String的处理

    @Test
public void test1(){
int i = 100;
String str = i + ""; // 直接拼接即可
String str2 = String.valueOf(10.03); // String.valueOf()方法 int anInt = Integer.parseInt(str); // 拆箱
double v = Double.parseDouble(str2); // 拆箱
}

关于包装类在三元运算会提升数据类型

    @Test
public void test1(){
Object object = true ? new Integer(10) : new Double(20);
System.out.println(object); // 10.0 Object o2;
if (true) o2 = new Integer(1);
else o2 = new Double(2);
System.out.println(o2); //
}

比较判断

    @Test
public void test1(){
Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i == j); // false Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false
}

为什么128 就False

- Integer内部定义了一个IntegerCache结构,IntegerCache定义了Integer[]数组,称为预加载池

保存了-128 到 127的字面值 可以直接使用,如果调用超出池范围的字面值,就需要扩容了,所以大于127的都是new的,地址自然不一样

最新文章

  1. SAX解析技术
  2. HTML5+CSS3实现图片可倾斜摆放的动画相册效果
  3. <停车卫> 产品需求说明书 version 2.0
  4. 异步dcfifo的读写
  5. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP
  6. HP P1008打印机如何打印特殊纸张
  7. js控制只能输入数字
  8. c++builder 代码输入助手
  9. 1023: [SHOI2008]cactus仙人掌图 - BZOJ
  10. Windows10搭建PHP7开发环境
  11. iOS10新增Api详解
  12. Linux 下防火墙端口设置
  13. 最流行的Node.js应用开发框架简介
  14. Nginx 和 IIS 实现动静分离【转载】
  15. Android中使用开源框架citypickerview实现省市区三级联动选择
  16. px转vw和vh的工具(对前端同学有用)
  17. Servlet 笔记-生命周期
  18. php写一个简洁的登录页面
  19. mysql 8.0~MGR多成员读一致性
  20. 自适应XAML布局经验总结 (四)区域布局设计模式

热门文章

  1. jupyter之配置自己喜欢的python环境
  2. Mac下 eclipse target runtime com.genuitec.runtime 解决方法
  3. 报错:Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'gender' at row 1
  4. 刷oj之类的题时java Scanner读取太慢解决之道
  5. deepin 系统 ssh,samba,redis,取消开机密码等相关配置
  6. CF 631C report
  7. Serpent.AI - 游戏代理框架(Python)
  8. Tensorboard详解(下篇)
  9. Linux/CentOS7搭建Anaconda运行环境
  10. redis++:Redis持久化 rdb & aof 工作原理及流程图 (三)