Java 包装类

132 阅读3分钟

包装类

包装类:基本数据类型对应的引用类型(用一个对象,把基本数据类型给包起来)

基本数据类型所对应的包装类

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

Interger

获取Interger对象的方式

方法名说明
public Integer(int value)根据传递的整数创建一个Integer对象
public Integer(String s)根据传递的字符串创建一个Integer对象
public static Integer valueOf(int i)根据传递的整数创建一个Integer对象
public static Integer valueOf(String s)根据传递的字符串创建一个Integer对象
public static Integer valueOf(String s, int radix)根据创建的字符串和进制创建一个Integer对象

通过构造方法和静态方法获取对象的区别

在Integer类中底层代码的静态代码块中,提前创建好了-128 ~ 127的Integer对象,并存储在静态数组static Integer[] archivedCache

  • 使用构造方法获取对象,每个对象都是new出来的

  • 使用静态方法valueOf()获取对象,在底层会先判断数据是否在-128 ~ 127之间

    • 如果在-128 ~ 127之间,会直接返回已经在底层创建好的,储存在archivedCache静态数组的对应对象
    • 如果不在-128 ~ 127之间,才会new一个新的Integer对象
    • 优点:节约内存

在以前包装类如何进行计算

  • 把对象进行拆箱,变成基本数据类型
  • 相加
  • 把得到的结果再次进行装箱(再变回包装类)

在JDK5后对获取对象和计算的方式进行了优化

在JDK5的时候提出了一个机制:自动装箱和自动拆箱

  • 自动装箱:基本数据类型会自动地变成其对应的包装类

  • 自动拆箱:包装类会自动地变成其对象的基本数据类型

  • 在JDK5后,int和Integer可以看作是同一个东西,因为在内部可以自动转化

//自动装箱的动作
//在底层会自动地调用静态方法valueOf()得到一个Integer对象
Integer i1 = 10;
//自动拆箱的操作
int i = i1;

Interger成员方法

方法名说明
public static String toBinaryString(int i)得到二进制
public static String toOctalString(int i)得到八进制
public static String toHexString(int i)得到十六进制(在Object类中的toString()方法中,就是用这个方法将地址转换为十六进制形式)
public static int parseInt(String s)将字符串类型的整数转成int类型的整数
  • 为什么返回值设置成String类型而不是int或long类型

    • 二进制010101,无法用int或long类型存储
    • int或long类型储存有长度限制,例如int类型只能存储10位数,而二进制可以是好长好长的,使用String类型就不会有长度限制的问题
  • parseInt(String s)方法细节

    • 在类型转换的时候,括号中的参数只能是数字不能是其他,否则代码会报错
    • 在8中包装类中,除了Character都有对应的parseXxx(String s)方法,进行类型转换

键盘录入的细节

当我们在使用next(),nextInt(),nextDouble()在接收数据的时候,遇到空格、回车、制表符的时候就停止了

约定:在以后想要键盘录入,不管遇到说明类型,统一使用nextLine(),之后再进行类型转换

特点:遇到回车才停止

String line = sc.nextLine();

int i = Integer.parseInt(line);
double d = Double.parseDouble(line);