读书人

Java根本类型转换

发布时间: 2013-11-08 17:52:32 作者: rapoo

Java基本类型转换

?

A:自动类型转换

?

?

? ? ? ? ? ? ?以下两条线路可以自动从左到右的类型转换

?????byte-short-int-long-float-double

?????char-int-long-float-double

?

当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换成字符串类型。?

?

?

B:强制类型转换

?

若要想从右边转换成左边的类型,则只能用强制类型转换

其语法格式为:(targetType)value,进行强制类型转换时通常会发生溢出,从而引起数据丢失,如:

??????int?value=233

??????byte?bytevalue=(byte)value

Int类型是4个字节,占32位:

Int类型的233:?0000?0000?0000?0000?0000?0000?0000?0000?1110?1001??

byte类型233:??0000?0000?0000?0000?0000?0000?0000?0000?1110?1001

可见此时的bytevalue的值是1110?01001

而负数在计算机里是以补码形式存在的,所以:

???bytevalue补码:1110?1001

? ? ? ? ? ? ? ? ? ?反码:1110?1000

? ? ? ? ? ? ? ? ? ?原码:1001?0111

?

得到bytevalue的值为:1001?0111?换成十进制:-(16+4+2+1)=-23

?

通常,字符串类型不能直接转换成基本类型,但可以通过基本类型对应的包装类则可实现,java为八种基本类型都提供的了对应的包装类:

Boolean对应Boolean类,byte对应Byte类,short对应Short类

Int对应Intteger?,long对应Logn类,char对应Character类,float对应Float类,

double对应Double类?

8个包装类提供了一个parseXxx(String?str)的静态方法用于将字符串转换成基本类型,

如String?str=“45”

???int?intvalue=Integer.parseInt(str);

C:表达式的自动提升?

当一个算术表达式中包含多种数据类型的的值时,整个算术表达式的数据类型将发生类型自动提升,有如下规则:

1)所有byte型、short型char型数据将提升为int型

2)整个素数表达式的数据类型将提升到和表达式中最高等级操作数同意的类型

一个典型的错误:

???Short??s=5;//表达式中s自动提升为int类型,表达式右边类型为int

???s=s-2;//s-2为int类型,不能把一个int类型赋值给short类型,除非进行强制类型转换

如果表达式中包含字符串,则“+”不再是加法运算符,而是链接运算符

如:“helloJava”+8+7?得到的是helloJava87

?????7+8+“hellJava”得到的是15helloJava

读书人网 >编程

热点推荐