八种基本数据类型表示范围如下:
类型 | 占用空间 | 取值范围 |
byte(字节型) | 1字节 | -128~127 |
short(短整型) | 2字节 | -2^15~2^15-1 |
int(整型) | 4字节 | -2^31~2^31-1 约21亿 |
long(长整型) | 8字节 | -2^63~2^63-1 |
float(单精度) | 4字节 | -3.4028234*10^38~3.4028234*10^38 |
double(双精度) | 8字节 | -1.797693*10^308~1.797693*10^308 |
char(字符型) | 1字节 | 0~65535 |
boolean(布尔型) | 1或4字节 | false、true |
ps:
long型数值赋值的时候后跟‘L’
float的尾数有效数字为7位。
浮点数值默认类型位double型,如果想要float类型的数据,需要在后面添‘F‘或’f‘。
可以采用科学计数法表示,形式为:数值e指数 或 数值E指数(指数是指10的幂次)
char采用Unicode字符集(C++采用的是ASCII码)。
JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,占1字节,这是为了便于JVM处理。实际上,boolean有效位只有1bit就足够了。
-------------------------------------------
自动类型转换:容量小的类型可以自动转换为容量大的类型。
byte->short->int->long
float->double
char->int,int->double这些不但可以自动转换,而且不会损失精度。
而int->float,long->float,long->double则可能会损失精度。
强制类型转换:将一个类型强制转换为另一个类型,那么如果我们强转的数值超过了强转后的类型的表示范围,就会出现异常数值。所以我们在使用强转的时候,要注意一下值的取值范围。
ps:运算表达式中,有多个类型的数值,会自动提升为范围较广的数值类型。
----------------------------------------------
引用数据类型,包括类的引用,接口的引用,数组的引用。
所有数值型数据都是带符号数。JAVA中如果没有初始化就会赋一个默认值(数值-0,引用类型-NULL)