Java中有两大数据类型:八大基本数据类型、引用数据类型。
基本数据类型的变量是保存在栈中,引用数据类型是保存在堆中。
一般没有指定类型的情况下,整数默认是int型,小数默认double型
类型 | 说明 | 占用内存 | 取值范围 | 默认值 |
---|---|---|---|---|
boolean | 布尔型 | - | true/false | false |
byte | 字节型 | 1个字节 | -27 ~ 27-1 -128 ~ 127 | 0 |
short | 短整型 | 2个字节 | -215 ~ 215-1 -32768 ~ 32767 | 0 |
char | 字符型 | 2个字节 | 0 ~ 215-1 | u0000 |
int | 整型 | 4个字节 | -231 ~ 231-1 -2,147,483,648 ~ 2,147,483,647 | 0 |
long | 长整型 | 8个字节 | -263 ~ 263-1 | 0 |
float | 单精度浮点型 | 4个字节 | 后缀F或f,1位符号位,8位指数,23位有效尾数 | 0.0 |
double | 双精度浮点型 | 8个字节 | 1位符号位,11位指数,52位有效尾数 | 0.0 |
类型间转换
类型转换分为:自动类型转换(隐式类型转换)、强制类型转换。
-
自动类型转换是当一个数据类型从小范围向大范围进行转换时,java会自动进行隐式的类型转换,不需要我们手动处理,同时,数据在转换之后也不会存在数据精度丢失的问题。
-
强制类型转换是从取值范围大的数据类型转至取值范围小的数据类型,如果不进行强制类型转换则会报错,同时在强制类型转换时,应需考虑能否接受精度缺失。
// 强制转换
double d = 1000;
float f = (float) d;
强制转换时可能出现的问题:
-
会损失精度,产生误差,小数点以后的数字全部舍弃。
-
容易超过取值范围