Java中的隐式类型转换和显式类型转换

一、隐式类型转换

隐式类型转换也叫做自动类型转换
1、规则:
从存储范围小的类型到存储范围大的类型。

2、转换方向:
byte→short(char)→int→long→float→double(这里指的是只有前面的数据类型能随便转换成后面的)
—实际开发中这样的类型转换很多,但没有为这种转换提供专门的语法,都是由虚拟机自动完成。

3、例子:
byte b = 10;short sh = b;这里在赋值时,JVM首先将b的值转换为short类型,然后再赋值给sh。

二、显式类型转换

显式类型转换也叫做强制类型转换
1、规则:
从存储范围大的类型到存储范围小的类型。

2、转换方向:
double→float→long→int→short(char)→byte
强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
—需要在被转换值的前面添加个括号,括号里面写的是希望得到的数据类型。

3、例子:
int m = 1234;
byte b = (byte)m;//-46
解析:
整数强制转换为整数时取数字的低位,例如int类型的变量转换为byte类型时,则只取int类型的低8位(也就是最后一个字节)的值。
则m的值还是12345,而b的值为-10。b1的计算方法如下:m的值转换为二进制是10011010010,取该数字低8位的值作为b的值,则b
的二进制值是11010010,按照机器数的规定,最高位是符号位,1代表负数,在计算机中负数存储的是补码,则该负数的原码是10101110,
该值就是十进制的-46。

附:
补码算得原码:—百度百科
算法1: 补码=原码取反再加1的逆运算
10010110是补码,应先减去1变为反码,得10010101;
由反码取得源码即除符号位外其他为按位取反,得11101010,即十进制数的-106

算法2:负数补码速算法,由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字按位取反的逆运算
10010110是补码,符号位与最后一个1之间的所有数字按位取反,得11101010

注意:
+=具有强转效果(short s = 1;s = s + 1;s += 1;前面的s=s+1会报错,因为s+1会先转换成int类型,然后再赋值给short类型,这样可能数据丢失;s+=1具有强转效果,相当于s = (short)(s+1),所以正确)

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值