5.4对象包装器与自动装箱
如:Integer对应基本类型int,我们一般称之为"包装器"。
1)对象包装器是不可变的,一旦构造了包装器,就不允许更改包装在其中的值。
2)对象包装器类还是final,因此不能定义它们的子类。
**注:**ArrayList的效率远远低于int[]数组。是因为:每个值分别包装在对象中。
为什么使用ArrayList而不使用int[],是因为在一个小型集合中,操作的便利性要优于执行效率。
有一个更加便于添加 int 类型的元素到ArrayList中
如:
// 自动装箱
list.add(3); // 将会自动地转换成
list.add(Integer.valueOf(3)); // 这种转换称为自动装箱
// 自动拆箱
int n = list.get(i); // int n = list.get(i).intValue();
如:在一个条件表达式中混合使用Integer和Double类型,Integer值就会拆箱,提升为double,在装箱成Double。
Integer n = 1;
Double m = 3.4;
System.out.printf(true ? n : m);
不管是装箱还是拆箱,都是编译器认可的,而不是虚拟机。
例如:我们想要将数字字符串转换成数值。
int x = Integer.parseInt(s); // 将字符串转换成整型
5.5参数数量可变的方法
printf方法表明这个方法可以接收任意数量的对象。实际上,printf方法接收两个参数,一个是格式字符串,另一个是Object[]数组。
扫描二维码关注公众号,回复:
8812150 查看本文章
5.6枚举类
注:枚举类比较时,不需要使用equals,直接使用"= ="就可以了。
使用枚举编写商品的尺寸。
package com.eleven.enums;
import java.util.Scanner;
public class EnumTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入尺寸:SMALL,MEDIUM,LARGE,EXTRA_LARGE");
String input = in.next().toUpperCase(); // toUpperCase():将字符串转换成大写
Size size = Enum.valueOf(Size.class, input); // valueOf():返回指定名字
System.out.println("尺寸为:" + size);
System.out.println("尺寸缩写:" + size.getAbbreviation());
if(size == Size.EXTRA_LARGE) {
System.out.println("你很胖!");
}
}
}
enum Size{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation) { this.abbreviation = abbreviation; }
public String getAbbreviation() { return abbreviation; }
}
5.7反射
参考:https://blog.csdn.net/huangliniqng/article/details/88554510