经过之前对于API的学习:JAVA基础 —— API
接下来的文章让我们来了解一下不同类下的方法,但是这些方法不要去背。
而是要去记一下类名和类作用,也可以在以后去查阅API帮助文档。
Math、System、Runtime和Object | JAVA基础 (常用API)—— Math、System、Runtime和Object |
BigInteger和BigDecimal | JAVa基础(常用API) —— BigInteger和BigDecimal |
正则表达式 | JAVA基础(常用API) —— 正则表达式 |
时间相关类 | JAVA基础(常用API) —— 时间相关类 |
包装类 | JAVA基础(常用API) —— 包装类 |
目录
一、什么是包装类
包装类:基本数据类型对应的引用数据类型(就是把基本数据类型变成对象)
二、如何理解包装类
- 包装类就是引用数据类型
- 包装类本质上就是创建了一个对象,对象当中记录对应数据值。
综上:我们可以理解包装类就是:用一个对象把基本数据类型给包起来。
三、基本数据类型对应包装类
基本数据类型 | 对应包装类 |
byte | Byte |
short | Short |
char | Character |
int | lnteger |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
1. 获取Integer对象的方式(了解)
方法名 | 说明 |
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对象 |
public class IntegerTest {
public static void main(String[] args) {
// 1.用构造方法获取Integer的对象(JDK5以前方式)
Integer i1 = new Integer(1); // (int value)
Integer i2 = new Integer(1); // (String s)
System.out.println(i1); // 1
System.out.println(i2); // 1
// 2.利用静态方法获取Integer对象(JDK5以前方式)
Integer i3 = Integer.valueOf(123);
Integer i4 = Integer.valueOf("123");
Integer i5 = Integer.valueOf("123", 8); // (String s,int radix)
System.out.println(i3); // 123
System.out.println(i4); // 123
System.out.println(i5); // 83
// 3.以下两种方式获取对象的区别(掌握)
// 在实际开发中,-128~127之间数据,用的多
// 如果每次都new对象,浪费内存
// 所以,提前把这个范围之间的每个数据在底层已经创建好对象
// 如果用到了就不会创建新的,而是直接调用已经创建好了的对象
Integer i6 = Integer.valueOf(127); // (int value)
Integer i7 = Integer.valueOf(127); // (int value)
System.out.println(i6 == i7); // true
// 所以128 超出范围 会new一个新对象
Integer i8 = Integer.valueOf(128);
Integer i9 = Integer.valueOf(128);
System.out.println(i8 == i9); // false
// 看到new关键字,在java中,每一次new都是创建一个新的对象
// 所以下面的两个对象都是new出来的,地址值不一样
Integer i10 = new Integer(127);
Integer i11 = new Integer(127);
System.out.println(i10 == i11); // false
}
}
1.1 自动装箱和自动拆箱
在JDK5的时候,由于代码的冗余,所以提出了自动装箱和自动拆箱的机制。
- 自动装箱:把基本数据类型会自动变成其对应的包装类
- 自动拆箱:把包装类自动变成其对象的基本数据类型
public class IntegerTest {
public static void main(String[] args) {
// 自动装箱的动作
Integer i1 = 10;
// 在底层,此时还会自动去调用静态方法valueOf得到一个Integer对象
// 只不过这个动作不需要我们去操作了
Integer i2 = new Integer(10);
// 自动拆箱的动作
int i = 12;
// 在JDK5以后,int 和 Integer可以看做是同一个东西
// 在内部可以自动转化
}
}
1.2 如何使用包装类对象
- 不需要new,不需要调用方法,直接赋值即可。
2. Integer常用成员方法
方法名 | 说明 |
public static string toBinaryString (int i) | 得到二进制 |
public static string toOctalString (int i) | 得到八进制 |
public static string toHexstring (int i) | 得到十六进制 |
public static int parselnt (String s) | 将字符串类型的整数转成int类型的整数 |
注意:为什么返回值要设置为String类型呢?
- 二进制返回结果(例如:010101),但是如果我们是一个整数Int类型或者Long类型,0不能作为开头。
- Long类型和Int类型有长度限制。
public class IntegerTest {
public static void main(String[] args) {
//1.把整数转化为二进制、八进制、十六进制
String str1 = Integer.toBinaryString(100);
System.out.println(str1); //1100100
String str2 = Integer.toOctalString(100);
System.out.println(str2); //144
String str3 = Integer.toHexString(100);
System.out.println(str3); //64
//2.将字符串类型的整数转换成int类型的整数
//强类型语音:每种数据在java中都有各自的数据类型
//在计算的时候,如果不是用一种数据类型,是无法直接计算的
int i = Integer.parseInt("123");
System.out.println(i); //123
System.out.println( i + 1); //124
//细节:
//1.在类型转换的时候,括号里面的参数只能是数字不能是其他,否则会代码报错
//2.八种包装类中,除了Character都有对应的parseXxx的方法,进行类型转换
String str = "true";
boolean b = Boolean.parseBoolean(str);
System.out.println(b); //true
}
}
跟上:所以我们要修改一下键盘录入的代码:
public class IntegerTest { public static void main(String[] args) { //键盘录入 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = sc.next(); System.out.println(str); //123 //弊端: //当我们在使用next、nextInt、nextDouble在接受数据的时候, //遇到空格、回车、制表符时就会停止 //键盘录入的是123 132 ,那么此时就只能接收到空格前的数据 //但是我们想要的是一整行数据 //所以在以后当我们再进行键盘录入操作时 //不管什么类型,都统一使用nextLine //特点是遇到回车才停止 Scanner sc1 = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str1 = sc.nextLine(); System.out.println(str1); //123 123 } }
- 所以在以后当我们再进行键盘录入操作时,不管什么类型,都统一使用nextLine。
- 特点是遇到回车才停止。
四、练习:键盘录入
键盘录入一些1~100之间的整数,并添加到集合中。
直到集合中所有数据和超过200为止。
public class IntegerTest {
public static void main(String[] args) {
// 1.创建集合用来添加整数
ArrayList<Integer> list = new ArrayList<>();
// 2.键盘录入数据并添加到集合中
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入一个整数:");
String numStr = sc.nextLine();
int number = Integer.parseInt(numStr);
// 先把异常数据进行过滤
if (number < 1 || number > 100) {
System.out.println("当前数据超出范围,请重新输入");
continue;
}
// 添加到集合中
// 细节:
// number :基本数据类型
// 集合里面数据是Integer类型
// 在添加数据的时候出发自动装箱
list.add(number);
// 统计集合中数据和
int sum = getSum(list);
if (sum > 200) {
System.out.println("集合中所有数据和已经满足要求");
break;
}
}
// 验证结论
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + ",");
}
}
private static int getSum(ArrayList<Integer> list) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
int num = list.get(i);
sum = sum + num;
}
return sum;
}
}