AVA学习笔记之变量类型转换和类型自动提升

来源:互联网 发布:南京大学浙江大学知乎 编辑:程序博客网 时间:2024/05/29 07:05

AVA学习笔记之变量类型转换和类型自动提升

(2013-01-22 14:14:18)
转载
标签:

杂谈

分类: J2SE

变量的类型转换

 有编程经验的伙计都知道,在不同类型之间进行赋值操作就会越到类型转换的问题,java也是如此。

 1.JAVA的自动类型转换

如果下列2个条件都能满足,那么将一种类型的数据赋给另外一种类型变量时,将执行

自动类型转换(automatic type conversion):

· 这2种类型是兼容的。

· 目的类型数的范围比来源类型的大。

当以上2个条件都满足时,拓宽转换(widening conversion)发生。例如,int型的范围比所有byte型的合法范围大,因此不要求显式强制类型转换语句。对于拓宽转换,数字类型,包括整数(integer)和浮点(floating-point)类型都是彼此兼容的,但是,数字类型和字符类型(char)或布尔类型(bollean)是不兼容的。字符类型(char)和布尔类型(bollean)也是互相不兼容的。

2.不兼容类型的强制转换(强制类型转换)

完成两种不兼容类型之间的转换,你就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换。它的通用格式如下:

(target-type)value

其中,目标类型(target-type)指定了要将指定值转换成的类型。将int型强制转换成byte型。如果整数的值超出了byte型的取值范围,它的值将会因为对byte型值域取模(整数除以byte得到的余数)而减少。当把浮点值赋给整数类型时一种不同的类型转换发生了:截断(truncation)。整数没有小数部分,当把浮点值赋给整数类型时,它的小数部分会被舍去。

类型自动提升

在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。在表达式中对中间值的精确要求有时超过任何一个操作数的范围:

JAVA学习笔记之变量类型转换和类型自动提升
   变量a*b = 2000超过了byte的最大值,为处理这种情形,JAVA自动把byte型,short型提升到int型,这样计算记过d = 20

但有时也会带来意想不到的情况:

JAVA学习笔记之变量类型转换和类型自动提升

 

该程序试图将一个完全合法的byte型的值50*2再存储给一个byte型的变量。但是当表达式求值的时候,操作数被自动地提升为int型,计算结果也被提升为int型。这样,表达式的结果现在是int型,不强制转换它就不能被赋为byte型。确实如此,在这个特别的情况下,被赋的值将仍然适合目标类型。

在你理解溢出的后果的情况下,你应该使用一个显式的强制类型转换

JAVA学习笔记之变量类型转换和类型自动提升
  这样b的值是100.

类型提升的约定

1、将所有byte short 提升到int

2、如果操作数中有一个long,整个表达式提升到long型;

  如果操作数中有一个float ,整个表达式提升到float型;

  如果操作数中有一个double,整个表达式提升到double型

 总体就是把精确度向表达式中高的提升

0 0
原创粉丝点击