包装类
包装类:基本数据类型对应的引用类型(用一个对象,把基本数据类型给包起来)
基本数据类型所对应的包装类
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| char | Character |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
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);