部分内容引用自网络
数据类型
java的数据类型:
- 基本类型: int,boolean,float
- 引用类型:所有class类型
如果把一个基本类型视为对象?(引用类型)?
不行
但是我们可以换一个方法,可以定义一个Integer类,包换一个实例字段int
- 可以把integer视为int的包装类型(wrapper)
包装类型是引用类型, 只不过内部只有一个基本类型的变量。
JDK为每种基本类型都创建了对应的包装类型
这里要知道的是 JDK为每种基本类型都创建了对应的包装类型:
基本类型 | 对应的应用类型 |
---|---|
boolean | Boolean |
byte | Boolean |
short | Boolean |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
这里有两个比较特殊的 int 和char 注意看
int、integer和String的相互转换
自动装箱,自动拆箱
我们也可以让编译器自动在int和Integer之间转型:
- 自动装箱:auto boxing
int -> Integer
Integer n = 99; //Integer.valueOf(99)
int i = n; // n.intValue()
自动拆箱:auto unboxing
Integer -> intObject[] arr = new Object[1]; arr[0]= 999;// Integer.valueOf(999)
自动装箱和自动拆箱只发生在编译阶段
- 装箱和拆箱会印象执行效率
- 变异后的class代码是严格区分基本类型和引用类型的
- integer -> int 执行时可能会报错
Integer x = null;
int y = x //NullPointerException
已定义的静态变量
包装类型还定义了一些有用的静态变量
Boolean t = Boolean TRUE;
Boolean f = Boolean.FALSE;
int max = Integer.MAX_VALUE; //2147483647
int min = Integer.MIN_VALUE;//-2147483648
int sizeOfLong = Long.SIZE;//64(bits)
int bytesOfLong = Long.BYTES;//8(bytes)
可以利用向上转型把任意一种包装类型先变成number对象,然后再用特定方法把它们转换成基本类型
Number num = new Integer(999);
byte b = num.byteValue();
int n = num.intValue();
long ln = num.longValue();
float f = num.floatValue();
double d = num.doubleValue();
编译器会自动进行拆箱操作然后进行加法运算
然后把Integer类型向上转型为Number类型然后通过Number的floatValue方法得到浮点值打印出来