在开始工做至今,学习各类各样的技术之中发现本身的不少Java的基础知识都忘了⊙﹏⊙b汗。。。 并且越是学习越是发现Java基础的重要性,因此准备单独抽一下时间进行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类型的数据。
示例:spa
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);
结果:3d
i:127,bye:127 j:128,bye2:-128
说明:由于 byte 类型是 8 位,最大值为127,因此当 int 强制转换为 byte 类型时,值 128 时候就会致使溢出。因此在进行强制类型转换的时候,要注意取值范围!code
在强制转换的时候须要注意数据的精确度,不然可能会出现数据精确丢失。
例如 double类型的数据转换为float类型数据。
示例:blog
double d=10.1111115; float f=(float) d; System.out.println("f:"+f+",d:"+d);
结果:get
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,最终数据结果会取其中最高的一个!