基本数据类型转换

xiaoxiao2021-02-28  42

研究问题:

基本数据类型中数值类型的自动类型提升?基本数据类型中的数值类型强制转换??进行数学运算时的数据类型自动提升与可能需要的强制类型转换???

要点:

双目运算符隐含了强制类型转换符 byte a=3,b=4; a=(byte)(a+1)//等同于a+=1;

截图展示区:

1. package com.corn.testcast; public class TestCast { public static void main(String[] args) { byte a = 1000; // 编译出错 Type mismatch: cannot convert from int to byte float b = 1.5; // 编译出错 Type mismatch: cannot convert from double to float byte c = 3; // 编译正确 } }

对于byte c = 3; // 编译正确 jvm在编译过程中,对于默认为int类型的数值时,当赋给一个比int型数值范围小的数值类型变量(在此统一称为数值类型k,k可以是byte/char/short类型),会进行判断,如果此int型数值超过数值类型k,那么会直接编译出错。因为你将一个超过了范围的数值赋给类型为k的变量,k装不下嘛,你没有进行强制类型转换,当然报错了。但是如果此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。

2. package com.corn.testcast; public class TestCast { public static void main(String[] args) { byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换 int a = 3; byte b = a; // a为变量,用a赋值其他变量时发生在运行期,为保证操作安全,编译就出错:cannot convert from int to byte byte c = (byte) a; // 编译正确 float d = (float) 4.0; } } 3. package com.java.accuracy; public class DataTypeDemo { public static void main(String[] args){ byte a=3,b=4,c; int d=5; c=(byte)(a+b); // c=3+4; // b=d;//编译报错 byte e=(byte) 130; /* * 130默认为int类型,在内存中占4个字节,每个字节占8位 * 所以对应的二进制为: * 00000000 00000000 00000000 10000010 * 正数:原码=反码=补码 * * 强制类型转换时,将进行截取操作: * 10000010(新补码) * * 由类型转换后得到的新补码求出原码: * 补码 1(符号位) 0000010(数值位) * 反码 1 0000001 * 原码 1 1111110 * 转换成二进制为-126 */ System.out.println(c); System.out.println(e); } }

运行结果:

转载请注明原文地址: https://www.6miu.com/read-2627222.html

最新回复(0)