标签:通过 3.4 强制转换 范围 object 强制 e30 bye ring
前言在开始工作至今,学习各种各样的技术之中发现自己的很多Java的基础知识都忘了⊙﹏⊙b汗。。。 而且越是学习越是发现Java基础的重要性,所以准备单独抽一下时间进行Java基础的重新学习。在重新学习的时候,对这些又有了不同的感悟,于是准备将这些都记载下来,并整理成博客,希望能够帮助那些需要的人。
基本数据类型主要有这几个:
byte、short、int、long、float、double、char、boolean
可以分为三类:
数值类型的级别从低到高分别为:
byte,char,short(这三个平级)——>int——>float——>long——>double
其中由低级别转到高级别,是属于自动类型转换,这点是由系统自动转换的。
例如将int类型的数据转为float类型的数据。
示例:
int i=10;
float j=i;
System.out.println("i:"+i+",j:"+j);
结果:
i:10,j:10.0
如果由高级别转为低级别,则需要强制转换,也就是强制类型转换。
例如将int类型的数据转换为byte类型的数据。
示例:
int i=127;
int j=128;
byte bye=(byte)i;
byte bye2=(byte)j;
System.out.println("i:"+i+",bye:"+bye);
System.out.println("j:"+j+",bye2:"+bye2);
结果:
i:127,bye:127
j:128,bye2:-128
说明:因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。所以在进行强制类型转换的时候,要注意取值范围!
在强制转换的时候需要注意数据的精确度,否则可能会出现数据精确丢失。
例如 double类型的数据转换为float类型数据。
示例:
double d=10.1111115;
float f=(float) d;
System.out.println("f:"+f+",d:"+d);
结果:
f:10.111112,d:10.1111115
了解了数据类型的级别之后,如果用不同的数据类型进行计算,那么最终的数据类型又是哪一种呢?
这里我们用这几种来测试:
1.byte 类型的数据 加 short 类型的数据;
2.short 类型的数据 加 int 类型的数据;
3.int 类型的数据 加 long 类型的数据;
这里我们使用这个方法来获取最终的数据类型
public static String getType(Object o){
return o.getClass().toString();
}
代码:
short a=1;
byte b=2;
int c = 3;
long d = 4;
System.out.println(getType(a));
System.out.println(getType(b));
System.out.println(getType(c));
System.out.println(getType(d));
System.out.println(getType(a+b));
System.out.println(getType(a+c));
System.out.println(getType(c+d));
结果:
class java.lang.Short
class java.lang.Byte
class java.lang.Integer
class java.lang.Long
class java.lang.Integer
class java.lang.Integer
class java.lang.Long
看到结果是不是有点吃惊呢?那么是为什么呢?
这里的不同的数值类型数据进行相加的时候,会自动转换为级别最高的那一个。
那么short 类型的数据加 byte 类型的数据为什么是int类型呢?
因为在java的世界里,如果比int类型小的类型做运算,java在编译的时候就会将它们统一强转成int类型。
如果上述不好理解的,那么这里我们来做个实验测试下,通过结果来进行验证。
示例:
short a=1,b=2;
byte c=3,d=4;
System.out.println(getType(a+b));
System.out.println(getType(c+d));
结果:
class java.lang.Integer
class java.lang.Integer
那么这里可以得出结论,在数值类型中,若级别小于int,进行计算的时候,最终的数据类型会自动转换为int,如果高于int,最终数据结果会取其中最高的一个!
标签:通过 3.4 强制转换 范围 object 强制 e30 bye ring
原文地址:http://blog.51cto.com/12965378/2322387