java类型窄化转换,java的自动类型转换

package BaseType;

/*java的自动类型提升和窄化转换

*

* 1. 当一个char,short,byte类型的变量被赋值给一个超出他自身能表示的最大范围的数,java会自动将该数转化为int型.

*

* 2. 当char,short,byte类型的变量进行算术运算, 位操作运算 包括他们的复合运算的时候,会自动提升成int类型

* 但是算术运算,位操作运算和他们的复合运算不同, 具体不同之处如下代码.

* 算术运算符包括:+,-,*,/,%,+(一目运算符),-(一目运算符)

* 位操作运算符包括移位运算(&,^,|),按位运算(<>,>>>)

*

*/

public class AutoConversion

{

public static void main(String args[])

{

//由于int型赋值给比他表示范围小的类型,那么编译器类型检查就会报错,提示要进行强制类型转化,也就是窄化转换

//byte a = 129 ; 因为byte是8字节,表示的范围是从-128到+127, 所以赋值128会自动转化成int类型,编译器在进行类型检查就会报错,必须窄化转换为byte

byte a = (byte)129 ;

}

public void byteTest(byte x , byte y)

{

x = (byte) (x*y) ;//由于x*y的结果被自动提升为int类型, 所以在重新赋值给x时,就必须使用窄化转换, 其他的算术运算符和位操作运算相同

x = (byte) (x/y) ;

x = (byte) (x+y) ;

x = (byte) (x-y) ;

x = (byte) (x%y) ;

x++ ;

x-- ;

x = (byte)+y ;

x = (byte)-y ;

x = (byte) ~y ;

x = (byte) (x&y) ;

x = (byte) (x|y) ;

x = (byte) (x^y) ;

x = (byte) (x>>y) ;

x = (byte) (x<

x = (byte) (x>>>y) ;

x += y ;//复合运算不同, 尽管也进行了类型提升, 但是不需要窄化转换, 而且结果和使用算术运算或者位运算的结果相同, 但是具体为什么不需要,书里面也没有说,今后在接触到了再补充

x -= y ;

x *= y ;

x /= y ;

x %= y ;

x <<= 1 ;

x >>= 1 ;

x >>>= 1 ;

x &= y ;

x |= y ;

x ^= y ;

}

}

《thingking in java》笔记

原文:http://www.cnblogs.com/iamzhoug37/p/4274494.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值