Java中的八种基本数据类型
整型
byte 8位 取值范围 -2^7~2^7-1 包装类型 Byte
short 16位 取值范围 -2^15~2^15-1 包装类型 Short
int 32位 取值范围 -2^31~2^31-1 包装类型 Integer
long 64位 取值范围 -2^63~2^63-1 包装类型 Long
浮点型
float 32位 取值范围 -3.40E+38 ~ +3.40E+38 包装类型 Float
double 64位 取值范围 -1.79E+308 ~ +1.79E+308 包装类型 Double
布尔型
boolean 只有两个取值:true 和 false 包装类型 Boolean
字符型
char 16位 取值范围 \u0000~\uffff 包装类型 Character
示例: char c = 'c';
注意事项
有关包装类的缓存:
这里用Integer举例子
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b);//输出 false
两个都是new出来的对象,==是比较两者在堆中的地址
Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(1);
System.out.println(a == b);//输出 true
看到这里输出是false,大家可能会有些奇怪,为什么这里的两个对象是相等的呢,相等的话说明两者是同一个对象,那我们就想是不是valueOf这个方法里面另有乾坤呢,让我们进去源码瞧一瞧:
可以看到IntegerCache是关键,让我们继续往下看,看它对哪些范围进行了缓存
IntegerCache是Integer的内部静态类,初始化是会将-128~-127的对象都缓存到cache中。我们再来试试,没有在范围中的比较结果:
Integer a = Integer.valueOf(128);
Integer b = Integer.valueOf(128);
System.out.println(a == b);//输出 false
符合我们的预期结果
有关包装类的自动拆箱和装箱:用Integer举例子
int c = 1 ;
Integer d = 1 ;
System.out.println(c == d);//输出true
这里的d会自动拆箱为int类型,进行数值的比较
作者:sheepherder
出处:https://blog.youkuaiyun.com/weixin_45157630
版权所有,欢迎保留原文链接进行转载