数据类型

发布时间 2023-04-07 00:12:02作者: liuqIT

image

1. 基本数据类型

1.1. 整型

类型 存储需求 取值范围
byte 1字节 -128 ~ 127
short 2字节 -32768 ~ 32767
int 4字节 -2147483648 ~ 2147483647
long 8字节 -9223372036854775808 ~ 9223372036854775807

取值范围规律为:2^(字节N * 8 - 1),比如:2个字节取值范围:2^(2 * 8 - 1) = 2^15

1.2. 浮点型

float: 4字节,double: 8字节

1.3.char类型

char:2字节
char类型用于表示单个字符。通常用来表示字符常量。

1.4. boolean类型

boolean:占用存储看jvm实现,有些jvm用0、1表示,有些用false、true表示
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整型值和布尔值之间不能进行互相转换。

2. 引用数据类型

除了基本数据类型以外的类型,都是所谓的引用类型。

3. 类型转换

在Java中,将一种类型的值赋值给另一种类型是很常见的。boolean 类型与其他7种类型的数据都不能进行转换,char 类型不支持自动转换成它,只支持强制转换,除了这两种类型有些特殊以外,其他6种数据类型,它们之间都可以进行相互转换,只是可能会存在精度损失。
将6种数据类型按取值范围的大小顺序排列一下:double > float > long > int > short > byte

3.1. 自动类型转换

自动转换:隐式的,对程序员无感知
自动转换时会进行扩宽(widening conversion)。
因为较大的类型(如int)要保存较小的类型(如byte),取值范围是足够的,不需要强制转换。
在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他类型的自动转换不会出现精度损失。
》int--> float
》long--> float
》long--> double
》float --> double
除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。

3.2. 强制类型转

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换。
这也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。

强制转换可能会损失精度,主要有两种场景
  1、整数类型之间相互转换,如果整数超出目标类型范围,会对目标类型的范围取余数。
  2、从浮点类型转成整数类型,会发生截尾(truncation),也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数

4. 引用文章

Java 基本数据类型-四类八种:https://zhuanlan.zhihu.com/p/25439066