1.概述
Java程序中要求参与计算的数据,必须保证数据类型的一致性,如果不一致将发生类型转换。
2.自动转换
一个int类型变量和一个byte类型变量进行加法运算:
int a=1;
byte b=2;
运算结果将是int类型,这就是数据类型自动转换的现象。
自动(隐式)转换特点:
①将取值范围小的类型自动提升为取值范围大的类型;
②代码不需要进行特殊处理,自动完成。
public static void main(String[] args) {
int a=1;
byte b=2;
//byte c=b+a;//报错
//int类型和byte类型运算,结果是int类型
int d=b+a;
System.out.println(d);
}
3. 强制转换
将1.5赋值到int类型变量会发生什么?产生编译失败,无法赋值。
int a=1.5;//报错
double类型内存8个字节,int类型内存4个字节。1.5是double类型,取值范围大于int。可以理解为double是8升的水壶,int是4升的水壶,不能把大水壶中的水直接放进小水壶中。
只有通过强制类型转换,将double类型强制换成int类型才能赋值。
强制(显式)转换特点:
①将取值范围大的数据类型转换成取值范围小的数据类型;
②代码需要特殊处理,需要手动执行。
转换格式:
数据类型 变量名 = (数据类型) 被转换数据值;
将1.5赋值到int类型,代码修改为:
//double类型数据强制转换成int类型,直接去掉小数点。
int i = (int)1.5;
同理,一个short类型和1相加,若要将值赋值给short类型的变量,需要强制转换。
short a=2;
short b = (short) a+1;
注意事项:
①强制类型转换一般不推荐使用,可能发生精度损失、数据溢出;
数据溢出:
int a = (int) 6000000000L;//long强制转换成为int类型
System.out.println(a);//输出1705032704,数据溢出
精度损失:
int b = (int) 3.5;//double==>int,强制类型转换
System.out.println(b);//输出3,不是四舍五入,所有的小数位都会被舍弃。
②byte/short/char三种数据类型都能发生数学运算
char char1=’A’;//字符变量
System.out.println(char1+1);//输出66,大写字母A被当成65处理。
③ byte/short/char三种数据类型都能发生数学运算,在运算时,都会首先被提升为int类型,然后计算,计算结果为int数据类型
byte a = 10;
byte b = 20;
byte result = a + b;//编译报错,会提升成int数据类型计算,计算结果为int数据类型。
System.out.println(result);
④boolean类型不能发生数据类型转换。
网友评论