jdk源码分析——java.lang.Boolean
1.Boolean类里面的2个静态变量。
Boolean类,直接声明了2个静态变量,TRUE 和 FALSE,指向2个对象。
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
我们可以看一下,这2个声明为static的变量,在Boolean里有什么作用:
在
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
和
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
里面都使用了这2个变量。这就好理解了:当我们要把一个字符串(例如:"true","false")转为Boolean类的实例时,或者把数据类型为boolean的数据转为Boolean类的实例时,不需要再通过:new Boolean(true)的方式重新创建一个实例,这样做的好处可以节省内存。虽然实例化一个Boolean对象消耗的内存不多。至少这种思路对的。
在Integer类也有相似的做法,同样valueOf(int i)方法里把从-128到127常用的256个数字先缓存起来,如果要通过valueOf方法获取Integer的实例,则返回已经缓存起来的实例,而不用重新创建一个Integer的实例:
详细参考:java.lang.Integer
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
2.Boolean和boolean之间有什么联系?
Boolean是数据基础类型boolean的一个包装类。
3.Boolean的equals,==,和compareTo的区别?
3.1 equals这个方法,用于比较2个都是Boolean对象的“值”是否相等,
3.2 == 比较的是两个Boolean实例是否同一个实例。
Boolean b1 = new Boolean(false);
Boolean b2 = new Boolean(false);
System.out.println(b1 == b2);//false,因为b1和b2并非同一个对象。就是说再内存的地址是不同的。
System.out.println(b1.equals(b2));//true,因为b1的值是 false,b2的值也是false。
Boolean b3 = Boolean.valueOf(true);
Boolean b4 = Boolean.valueOf(true);
System.out.println(b3 == b4);//true,因为valueOf方法返回的是同一个对象。
3.3 compareTo和equals一样,比较的是值。不同的时候,
Boolean b5 = Boolean.valueOf(true);
Boolean b6 = Boolean.valueOf(true);
Boolean b7 = Boolean.valueOf(false);
Boolean b8 = Boolean.valueOf(false);
System.out.println(b5.compareTo(b6));//如果相等,返回0
System.out.println(b7.compareTo(b8));//如果相等,返回0
System.out.println(b5.compareTo(b7));//1
System.out.println(b7.compareTo(b5));//-1
------------------------------------------------------------
由于笔者也是一个java的初学者,如果有理解错误或者表达不清楚的地方,欢迎一起探讨,指正。
posted on 2017-02-06 14:37 lukelin1989 阅读(501) 评论(4) 编辑 收藏 举报