基本数据类型转换
程序员文章站
2022-07-15 17:05:43
...
研究问题:
- 基本数据类型中数值类型的自动类型提升?
- 基本数据类型中的数值类型强制转换??
- 进行数学运算时的数据类型自动提升与可能需要的强制类型转换???
要点:
-
- 双目运算符隐含了强制类型转换符
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);
}
}
运行结果:
上一篇: LintCode 491. 回文数 JavaScript算法
下一篇: FRP 内网穿透使用教程