日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JDK源碼Java.lang.Boolean的淺析

JDK源碼(jdk 1.5 b2)的研究是一個很大的范疇,那么今天先對Java.lang.Boolean開始解剖。

創(chuàng)新互聯(lián)10多年企業(yè)網(wǎng)站制作服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站制作及推廣,對成都純水機等多個方面擁有豐富的網(wǎng)站設(shè)計經(jīng)驗的網(wǎng)站建設(shè)公司。

首先我們來看JDK源碼中Java.lang.Boolean的代碼,剔除所有的方法和靜態(tài)變量,Java.lang.Boolean的核心代碼如下:

 
 
 
  1. public final class Boolean implements java.io.Serializable,Comparable  
  2. {  
  3. private final boolean value;  
  4. }  

很明顯,凡是成員變量都是final類型的,一定是immutable class,這個Boolean和String一樣,一旦構(gòu)造函數(shù)執(zhí)行完畢,實例的狀態(tài)就不能再改變了。

JDK源碼中Java.lang.Boolean的構(gòu)造函數(shù)有兩個:

 
 
 
  1. public Boolean(boolean value) {  
  2. this.value = value;  
  3. }  
  4. public Boolean(String s) {  
  5. this(toBoolean(s));  
  6. }  

都很簡單就不多說了。

另外注重到Java.lang.Boolean類實際上只有兩種不同狀態(tài)的實例:一個包裝true,一個包裝false,Java.lang.Boolean又是immutable class,所以在內(nèi)存中相同狀態(tài)的Boolean實例完全可以共享,不必用new創(chuàng)建很多實例。因此Boolean class還提供兩個靜態(tài)變量: 

 
 
 
  1. public static final Boolean TRUE = new Boolean(true);  
  2. public static final Boolean FALSE = new Boolean(false);   

這兩個變量在Class Loader裝載時就被實例化,并且申明為final,不能再指向其他實例。

提供這兩個靜態(tài)變量是為了讓開發(fā)者直接使用這兩個變量而不是每次都new一個Boolean,這樣既節(jié)省內(nèi)存又避免了創(chuàng)建一個新實例的時間開銷。

因此,用

 
 
 
  1. Boolean b = Boolean.TRUE; 

 
 
 
  1. Boolean b = new Boolean(true); 

要好得多。

假如碰到下面的情況:

 
 
 
  1. Boolean b = new Boolean(var); 

一定要根據(jù)一個boolean變量來創(chuàng)建Boolean實例怎么辦?

推薦你使用Boolean提供的靜態(tài)工廠方法:

 
 
 
  1. Boolean b = Boolean.valueOf(var); 

這樣就可以避免創(chuàng)建新的實例,不信看看valueOf()靜態(tài)方法: 

 
 
 
  1. public static Boolean valueOf(boolean b) {  
  2. return (b ? TRUE : FALSE);  
  3. }  

 這個靜態(tài)工廠方法返回的仍然是兩個靜態(tài)變量TRUE和FALSE之一,而不是new一個Boolean出來。雖然Java.lang.Boolean非常簡單,占用的內(nèi)存也很少,但是一個復(fù)雜的類用new創(chuàng)建實例的開銷可能非常大,而且,使用工廠方法可以方便的實現(xiàn)緩存實例,這對客戶端是透明的。所以,能用工廠方法就不要用new。

和Boolean只有兩種狀態(tài)不同,Integer也是immutable class,但是狀態(tài)上億種,不可能用靜態(tài)實例緩存所有狀態(tài)。不過,SUN的工程師還是作了一點優(yōu)化,Integer類緩存了-128到127這256個狀態(tài)的Integer,假如使用Integer.valueOf(int i),傳入的int范圍正好在此內(nèi),就返回靜態(tài)實例。

hashCode()方法很希奇,兩種Boolean的hash code分別是1231和1237。估計寫B(tài)oolean.java的人對這兩個數(shù)字有非凡偏好: 

 
 
 
  1. public int hashCode() {  
  2. return value ? 1231 : 1237;  
  3. }  

equals()方法也很簡單,只有Boolean類型的Object并且value相等才返true:

 
 
 
  1. public boolean equals(Object obj) {  
  2. if (obj instanceof Boolean) {  
  3. return value == ((Boolean)obj).booleanValue();  
  4. }  
  5. return false;  
  6. }  

JDK源碼Java.lang.Boolean的分析就到這里,希望可以在JDK源碼Java.lang.Boolean的基礎(chǔ)上分析其他的代碼,真正掌握J(rèn)DK。


網(wǎng)站欄目:JDK源碼Java.lang.Boolean的淺析
網(wǎng)站地址:http://www.5511xx.com/article/dpsdcij.html