-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
/*数据类型转换*/
class Demo
{
public static void main(String[] args)
{
byte b=3;
b=b+2;
System.out.println("b");
}
}
结果报错:损失精度,分析如下:
1st.byte b=3 ——>3是int型,但系统会先判断3是不是在byte范围内(-128~127),在,所以int型的3可以放进byte类型的b中去,此条代码也就是初始化
2ndb=b+2——> b是byte型,2是int型,两者类型不同,一个占1个8位,另一个占4个8位,需要系统自动类型提升,最终结果为int型,占4个8位,而b是byte型,占1个8位,所以报错提示有损精度
3rd.在此就需要“强制转换”,——>b=(byte)(b+2)强制转换为byte类型再赋进b中
下面是正确的强制转换例子
class Demo1
{
public static void main(String[] args)
{
//byte b=129; //编译错误,因为129超过byte取值范围 -128~127
byte b=(byte)129;//强制类型转换
System.out.println(b);//保留后8位 10000001 01111111=-127
}
}
其中具体转换过程分析如下:
其最高位为1,即表示负数,在java中数据表现形式是三种即十进制,八进制,十六进制,在此需要将其转换为相应十进制,遵从负数二进制转换算法:取反,再加1,得出最终结果-127
注意:数据类型转换时,低位转高位——>数据类型提升;
高位转低位——>首先判断是否超过低位的取值范围,再做相应转换