Java基础语法之类型转换

1.默认转换

Java基础语法之类型转换_第1张图片

实心箭头,表示无信息丢失,虚箭头,表示可能有精度损失。

  • 如果两个操作数中有一个是double,另一个会被转换成double
  • 否则,如果其中一个操作数是float,另一个操作数将会转换成float
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型
  • 否则,两个操作数都会被转换成int类型。

2.强制转换

  • 强制转换通过截断小数点将浮点值转换成整型
  • 如果要四舍五入,要使用Math.round(9.97);,返回值是long。

思考题:下面两个定义有没有区别

float f1=(float)12.345;
float f2=12.345f;

有区别,f1是从double转换过来的,f2本身就是float类型。

思考题

byte b1=3,b2=4,b;
1.b=b1+b2;
2.b=3+4;

1.报错,两个byte类型都会先转换成int,类型提升。
2.常量,先计算值,然后看是否在byte范围里,如果在就不报错。
变量在运行时才确定,而常量在编译时就确定

思考题byte b=(byte)130,结果是多少?

  • 计算机中的数值计算都是通过补码进行的
    130 : 00000000 00000000 00000000 10000010
    这是130的原码,也是反码,还是补码。
    做byte截取,8位:10000010
    Java基础语法之类型转换_第2张图片

所以结果为-126

补充知识

  • 原码:最高为符号位,0表示正数,1表示负数
  • 反码:正数的反码与原码相同,负数的反码符号位不变,数值位取反
  • 补码:正数的补码与原码相同,负数的补码为反码+1

你可能感兴趣的:(Java基础语法之类型转换)