类型分类
-
数字型
-
整数:byte、short、int、long
-
小数:float、double
-
-
字符型:char
-
布尔型:boolean
八大数据类型
基本数据类型 | 字节 | 位 | 默认值 | 范围 | 包装数据类型 |
---|---|---|---|---|---|
byte | 1 | 8 | 0 | -2^7 ~ 2^7-1 | Byte |
short | 2 | 16 | 0 | -2^15 ~ 2^15-1 | Short |
int | 4 | 32 | 0 | -2^31 ~ 2^31-1 | Integer |
long | 8 | 64 | 0 | -2^63~ 2^63-1 | Long |
boolean | 1 | 8 | false | true/false | Boolean |
char | 2 | 16 | \u0000(空格) | 0 ~ 65532(0 ~ 2^16-1) | Character |
float | 4 | 32 | 0.0 | -1.4e-45f ~ 3.4028235e+38f | Float |
double | 8 | 64 | 0.0 | 4.9e-324 ~ 1.7976931348623157e+308 | .Double |
自动类型转换和强制类型转换
类型大小排序:double>float>long>int>char=byte=short
-
自动类型转换是指小的类型自动赋值给大的类型
示例:
public static void main(String []args){
double a=1;
}
从上中得知,1是int类型,可以直接赋值给更大的double。
-
强制类型转换是指大的类型赋值给小的类型,使用强制类型转换会丢失精度。
语法:类型 变量名=(类型)值;
示例:
public static void main(String []args){
int a= (int)1.1;
System.out.println(a);
}
//输出1
从上中得知,输出1,说明精度会丢失。
自动装箱和自动拆箱
- 自动装箱是将基本数据类型赋值给包装数据类型时,会触发自动装箱
- 自动拆箱是将包装数据类型赋值给基本数据类型时,会触发自动拆箱
public static void main(String []args){
Integer a=1;
int b=a;
}
反编译为
public static void main(String args[]){
Integer a = Integer.valueOf(1);
int b=a.intValue();
}
实际上就是调用了Integer的valueOf方法,拆箱时,则自动调用了Integer的intValue();
总结:装箱是通过调用包装类的valueOf方法实现的,而拆箱是通过调用包装类的 xValue()实现的。(x代表对应的 基本数据类型)。
数据溢出
每个基本数据类型都有自己的范围,如果超过了这个范围,那么就会跳到相反的最值上面。
比如:
public static void main(String []args){
byte i=127;
i++;
System.out.println(i);
}
//输出-128
同理,当i=-128,执行i–后,i会变成127。