在java开发之中,经常会涉及到不同基础数据之间进行相互转换。JAVA语言除了布尔类型的数据外,其他的7种数据类型之间可以相互转换。java之中类型转换方式分两种:自动类型转换和强制类型转换: 1.自动类型转换: 所谓自动类型转换,是指系统支持把某种基础类型直接付给另一种基础类型的变量。 注意:自动类型转换的前提条件,必须是把表数范围小的数值或变量赋给表数范围大的变量。
其实很好理解,我们都知道数值型类型主要区别是分配的内存空间大小不同,可以想象一杯水往一个容积大的空桶之中倒进,水不会流出来,相反如果一桶水往一个小的空间杯子里面倒进的时候,水就会溢出。 所以java支持自动类型转换如上图所示。
2.强制类型转换: 同样的,小桶里的水可以倒到大桶里面,难道大桶里面的水不能够到进入小桶里面吗?正所谓艺术源于生活,代码何尝不是,只要是大桶里面的水没有超过小桶的容积,就可以到进去。所以,java引入了强制转换的概念。 强制转换的语法格式是:(targetType)value,强制转换的运算符是圆括号(())。 强制转换需要注意点: 1).把一个浮点数强制转换为整数时,java会直接截断浮点数的小数部分。 2).把一个超出数据范围的数值赋给数据类型是,会出现数据溢出的情况,造成数据的缺失。 例如:把233强制类型转换为byte类型的整数,而变成-23,其中里面的变化如下图。
如上图32位int类型的233在内存中如上图所示,强制类型转换为8位的byte类型,则需要截断前面24位,只保留右边8位,最左边的1是一个符号位,此处表明这是一个负数,负数在计算机里面是以补码形式存在的,因此还需要换算成原码。将补码建议就得到反码形式,再将反码取反就可以得到原码。
通常情况下,字符串不能直接转换成基本类型,但是可以通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 java为8种基本类型都提供了对应的包装类:boolean 对应 Boolean 、byte 对应 Byte、short 对应 Short、int对应Integer 、 long 对应 Long、char 对应 Character 、float对应Float 、double 对应 Double
3.表达式类型自动提升 在综合以上两种方式,还有一种隐性的方式--表达式类型转换。表达式归根到底属于自动类型转换的范畴之中。 表达式类型转换的自动提升规则: 1)所有的byte类型、short类型将被提升到int类型 2)整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。 例子: short a = 5; a= a-2; 这个时候会报错,因为a-2表达式已经被提升到int类型,而把int类型的赋给short,会引发错误。正确的如下。 int b = a-2; double d = a -2 +3.4;
转载于:https://www.cnblogs.com/mzmy/p/11157276.html