Java两种数据类型:
1):基本数据类型:byte,char,short int float long double、boolean
2):引用数据类型: 数组、类、接口。
级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double
自动类型转换:从低级别到高级别,系统自动转的;
强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量;
【八种基本数据类型的包装类】
byte ——Byte char----Character short ——Short int ——Integer float-----Float long-----Long double----Double boolean---Boolean
Integer和int的区别:Integer [ˈɪntɪdʒə(r)]
1.Integer是int的包装类,int则是java的一种基本数据类型
Integer的初值为null,int的初值为0。(Integer 是类,默认值为null,int是基本数据类型,默认值为0)
Integer实际是对象的引用,(当new一个Integer时,实际上是生成一个指针指向此对象);而int则是直接 存储数据值
2. Integer与new Integer比:无论值是否相同,Integer与new Integer都不会相等,结果为false。
情况一:Integer范围在-128~127之间,指向专门存放它的常量池;new Integer引用指向堆。它们的内存地址不一样,所以无论值是否相同,比较结果都为false。
情况二:Integer范围不在-128~127之间,编译时Integer.valueOf()返回的是new Integer();而new Integer引用指向堆。这样两者是两个不同的堆栈对象,无论堆上的值是否相同,引用地址不同,比较结果都为false。
情况三:两个Integer范围都不在-128~127之间,则依然是两个new Integer对象,则比较结果为false。
3 .两个 new出来的Integer相比:两个都是new出来的,无论堆上的值是否相同,引用地址不同,结果为false。
4.两个 非new出来的Integer相比: 两个都是非new出来的Integer,如果数在-128~127之间,值相同则为true,否则为false。
原因:java在编译Integer时,会翻译成Integer i = Integer.valueOf(),而valueOf()会对-128~127之间的数进行缓存。
5.int和Integer比:无论Integer是new出来的 还是-128~127范围之外的,值相同则为true,否则为false。
原因:Integer与int比较时,Integer会自动拆箱为int
Integer 的自动拆箱和装箱
自动装箱 就是Integer.valueOf(int i);
自动拆箱 就是 i.intValue();
自动装箱规范要求 byte<= 127、char<=127、-128<=short <=127、-128<=int <=127都被包装到固定的对象中(缓存)。