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的初学者,如果有理解错误或者表达不清楚的地方,欢迎一起探讨,指正。  

    原文作者:java源码分析
    原文地址: https://www.cnblogs.com/codetree/p/testsssssssssss.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞