1.integer包装类
Integer事先就会在堆空间中开辟一个空间存放-128~127之间的数.
当创建Integer类时数据在-128~127之间, 那么就直接去事先创建好的空间里去找, 而超出这个范围则需要单独再去new出一个空间.
因为在实际开发中,-128~127之间的数据,用的比较多。如果每次使用都是new对象,那么太浪费内存了
所以,提前把这个范围之内的每一个数据都创建好对象如果要用到了不会创建新的,而是返回已经创建好的对象。
在JDK5的时候提出了一个机制:自动装箱和自动拆箱自动装箱:把基本数据类型会自动的变成其对应的包装类自动拆箱:把包装类自动的变成其对象的基本数据类型
在JDK5以后,int和Integer可以看做是同一个东西,因为在内部可以自动转化。
// 实例化Integer对象
Integer integer = Integer.valueOf(127);
Integer integer1 = Integer.valueOf(128);
// 将int转化为二进制, 八进制, 十六进制
// 返回字符串以免太大
String binaryString = Integer.toBinaryString(520);
String octalString = Integer.toOctalString(520);
String hexString = Integer.toHexString(520);
System.out.println(binaryString);// 1000001000
System.out.println(octalString);// 1010
System.out.println(hexString);// 208
// 将字符串类型转为int类型
int i = Integer.parseInt("520");
System.out.println(i + 1);// 521
注意 :
细节1:在类型转换的时候,括号中的参数只能是数字不能是其他,否则代码会报错
细节2:8种包装类当中,除了Character都有对应的parsexxx的方法,进行类型转换
2.练习
2.1
键盘录入一些1~100之间的整数,并添加到集合中。直到集合中所有数据和超过200为止。
Scanner scanner = new Scanner(System.in);
ArrayList<Integer> integerArrayList = new ArrayList<>();
int sum1 = 0;
while (sum1 <= 200) {
System.out.println("请输入1~100之间的整数:");
String s = scanner.nextLine();
int i = Integer.parseInt(s);
integerArrayList.add(i);
sum1 = 0;
for (int i1 = 0; i1 < integerArrayList.size(); i1++) {
sum1 = sum1 + integerArrayList.get(i1);
}
}
System.out.println(integerArrayList);
2.2
// 实现parseInt方法
String s = "123456789";
boolean matches = s.matches("[1-9]\\d{0,9}");
if (matches){
// 符合
int all = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int num = c - '0';
all = all * 10;
all = all + num;
}
System.out.println(all);
}else {
// 不符合
System.out.println("不符合要求");
}