/*
关于java中的整数型
byte
short
int
long
*/
public class test
{
public static main(String[] args){
//100L是long类型
//x是long类型的变量
//不存在类型转换,直接赋值
long x = 100L;
//x变量是long类型,8个字节
//y变量是int类型,4个字节
//一下程序可以编译通过吗?
//编译报错,大容量不能直接赋值给小容量
//int y = x;
//大容量转换成小容量,需要进行强制类型转换
//强制类型转换需要家"强制类型转换符"
//加上强制类型转换类型之后,编译通过了,但是运行阶段可能会损失精度
//所以强制类型转换谨慎使用,因为损失精度之后,可能会损失的更加严重、
//强转原理:
//原始数据:00000000 000000000 00000000 00000000 00000000 00000000 00000000 01100100
//强转之后的数据:00000000 00000000 00000000 01100100
//将左边二进制砍掉【所有的数据强转的时候都是这样完成的】
int y = (int)x;
System.out.println(y);
//原始数据:00000000 000000000 00000000 00000000 10000000 00000000 00000000 00000000
//强转之后的数据:10000000 00000000 00000000 00000000
//10000000 00000000 00000000 00000000 目前存储再计算机内部,计算机存储数据都是以补码的形式存储
//所以10000000 00000000 00000000 00000000现在是一个补码形式
//将以上的补码转码到原码就是最终的结果
long k = 2147483648L;
int e = (int)k;
System.out.println(e);//损失精度非常严重,结果是负数【-2147483648】
//以下程序无法编译通过的
//因为50是Int类型的字面值,B是byte类型的变量
//显然是大容量Int转换成小容量byte
//大容量转换成小容量。是需要添加强制类型转换符,所以会报错。但是目前不会
//但是在实际编译的时候,以下代码编译通过了,这说明在java语言当中,当一个整数型字面值
//没有超过byte类型的取值范围的话,该字面值可直接赋值给Byte类型的变量
byte b = 50;
byte c = 127;
//byte b1 = 128; 字面值超过,则报错
//纠正则使用强制类型转换符
byte b1 = (byte)128;
System.out.println(b1);
//结果为-128
}
}
未经允许不得转载:天府数据港官方信息博客 » 强制转换符
客官点个赞呗! (0)