数据类型转换
数据类型的转换呢,分为俩种嗷,分别是隐式转换和显示转换
隐式转换
- 特点:代码不需要进行特殊化处理,字段完成
- 规则:数据范围从小到大
- 精度排行(从高到低): double > float > long > int > short > byte
public class main {
public static void main(String[] args){
//左边是long类型,右边是默认的int类型,左右不一样
//一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储
//int-->long,复合数据范围从小到大的要求
//这一行代码发生了自动类型转换。
long num1 = 100;
System.out.println(num1);// 100
//左边是double类型,右边是float类型,左右不一样
//float-->double,符合从小到大的规则
//也发生了自动类型转换。
double num2 = 2.5F;
System.out.println(num2);// 2.5
//左边是float,右边是Long类型,左右不一样
//Long-->float,float范围更大一些,符合从小到大的规则
//也发生了自动类型转换
float num3 = 30L;
}
}
显示转换
- 特点:代码需要进行特殊的格式处理,不能自动完成。
- 格式:范围小的的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
public class main {
public static void main(String[] args){
//左边是int类型,右边是long类型,不一样
//long-->int,不是从小到大
//不能发生自动类型转换!
//int num1 = 100L;
//格式:范围小的的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
int num1 = (int) 100L;
System.out.println(num1);
}
}
注意事项:
1.强制类型转换,一般不推荐转换,一般会发生精度损失,数据溢出。
2.byte/short/char这三种类型都可以发生数学运算,例如加法"+"。
3.byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算。
4.boolean类型不能发生数据类型转换。
5.对于byte/short/char三种类型来说,如果右侧得数值不超过它得范围本身,那么它会由一个隐含得为我们补上(byte)(short)(char)。
6.如果没有超过左侧得范围,编译器补上强转。
7.如果右侧超过左侧得范围,编译器报错。
8.double-->int,强制类型转换 并不是四舍五入,所以小数位都被舍弃。
public class main {
public static void main(String() args){
char zf1 = 'A';//这是一个字符型变量,里面是大写字母A
//计算机的底层会用一个数字(二进制)来代表字符A,就是65
//一旦char类型进行了数学计算,那么字符就会按照一定规则翻译成为一个数字
byte num4 = 50; //注意!右侧的数值大小不能超过左侧的类型范围
byte num5 = 60;
//byte + byte --> int + int --> int
int result1 = num4 + num5
System.out.println(result1); //110
short num6 = 40;
//byte + short --> int + int --> int
//int result2 = num4 + num6;
//int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发送数据溢出。
short result2 = (short)(num4 + num6);
}
}
|