Java作为一种强类型语言,一个变量在声明之初就必须确定其数据类型,在未经数据类型转换的前提下,数据类型不变。
java中的数据类型分为两类,分别是基础数据类型和引用数据类型,简单分类如下图所示。
各基础数据类型的介绍
数据类型 | 大小(字节) | 取值范围 | 特点 |
---|---|---|---|
byte | 1 | -127-128 | |
short | 2 | -2 ^15 - 2^15-1 | |
int | 4 | -2^31 - 2^31-1 | 整型数据默认为int型 |
long | 8 | -2^63 - 2^63-1 | 定义long型数据时数据结尾要加l或L |
char | 2 | Unicode字符集 | 无符号数据类型 |
float | 4 | 1.4e-045〜3.4e + 038 | 单精度数据类型/在初始化时数据后要加f |
double | 8 | 4.9e-324〜1.8e + 308 | 浮点数字默认为double型 |
boolean | 4 | true 、 false | 不参与数据类型转换 |
数据类型转换
在java中对数据进行初始化等操作时,为保证数据类型一致,避免数据溢出等问题,需要对数据进行类型转换,数据的类型转换分为强制类型转换和隐式类型转换。
隐式数据类型转换(自动类型转换)
在进行数据初始化和运算时,在满足一定条件的情况下会进行隐式数据转换,隐式数据转换由不需要额外代码和操作,由系统自动进行转换。
当数据源的数据范围小于被初始化变量的数据类型的范围时,系统会将范围较小的数据类型自动提升为数据较高的数据类型。示例如下:
long a = 100l;
double b =a;//double的数据范围大于long,在赋值的过程中long->double
//的类型转换,在此过程中a本身的数据类型不变
System.out.println(b);//输出b为100.0,
当byte,short,char等范围小于int的数据类型变量直接彼此或自身进行运算时,数据类型会被自动提升为int数据类型。当涉及到浮点数运算时数据会自动被提升为参与运算的数据中范围最大的数据类型。
byte a = 1;
byte b = 2;
byte c = a+b;//编译报错,a和b在运算的过程中被自动提升为了int数据类型,所以byte数据类型的c无法直接接收该值。
int d = a+b;//int类型的数据可以正常接收该值
char e = "a";//a的ASCII值为97
char f = "b";//b的ASCII值为98
int gg = e+f;//结果为195,即变量e和f对应的ASCII值相加,超出此ASCII码范围后位Unicode码相加
System.out.println(gg);
float h = 3f;
float hh = h+a+b;//数据中最大数据范围为float,float数据类型的变量可以接收该运算结果
double i=h+1.0;//java中的小数默认为double型,故而需要double型的数据来接收
//运算结果
System.out.println(h);
强制数据类型转换(显示转换)
当需要将大范围的数据类型转换为小范围的数据类型时,需要用到强制类型转换。
转换格式
原数据类型 变量 = (目标数据类型)需要强转的数据
int a =100;
byte b =(byte)(a+100);//运算结果为int型,需要强制转换为byte型之后此案被byte接收
注意事项
- 当大范围数据转换为较小的数据类型时,需要注意不要发生数据溢出
- 浮点数被转换为整型时,小数部分会被舍弃
- char型数据参与数据转换,boolean型数据不参与