创新路
我们一直在努力

强制转换符

/*

   关于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)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机