成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JDK源碼Java.lang.Boolean的淺析

開發 后端
JDK源碼Java.lang.Boolean的理解和分析是什么呢,希望可以在對JDK源碼Java.lang.Boolean的基礎上分析其他的代碼,舉一反三掌握好JDK。

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

首先我們來看JDK源碼中Java.lang.Boolean的代碼,剔除所有的方法和靜態變量,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一樣,一旦構造函數執行完畢,實例的狀態就不能再改變了。

JDK源碼中Java.lang.Boolean的構造函數有兩個:

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

都很簡單就不多說了。

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

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

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

提供這兩個靜態變量是為了讓開發者直接使用這兩個變量而不是每次都new一個Boolean,這樣既節省內存又避免了創建一個新實例的時間開銷。

因此,用

  1. Boolean b = Boolean.TRUE; 

  1. Boolean b = new Boolean(true); 

要好得多。

假如碰到下面的情況:

  1. Boolean b = new Boolean(var); 

一定要根據一個boolean變量來創建Boolean實例怎么辦?

推薦你使用Boolean提供的靜態工廠方法:

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


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

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

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

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

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

  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的基礎上分析其他的代碼,真正掌握JDK。

【編輯推薦】

  1. 淺談Java線程的生命周期
  2. JDK的概念、組成及JDK常用包
  3. JDK1.4在Windows下的環境配置
  4. JDK1.6在LINUX下的安裝配置
  5. JDK1.5中新的語言特征淺析
責任編輯:仲衡 來源: 網易博客
相關推薦

2009-07-08 14:06:22

ClassLoaderJDK源碼

2009-07-08 17:59:51

JDK JRE

2009-07-07 16:39:40

JDK Observe

2021-10-26 10:22:27

ArrayList阿里云

2009-07-08 15:31:40

JDK 6.0web service

2009-07-09 11:02:37

JDK5.0內置工具

2009-07-07 18:06:14

JDK1.5枚舉類型

2009-07-08 16:02:49

JDK1.5String

2009-07-08 17:02:11

JDK實現調用攔截器

2009-07-07 15:53:02

JDK日志

2011-12-02 13:04:06

Java

2009-07-07 13:02:29

JDK1.5

2017-02-27 09:03:37

Mesos架構源碼

2009-07-09 10:28:19

線程池JDK5

2009-07-07 15:14:56

JDK日志STAF

2009-07-07 16:13:39

JDK日志

2011-04-19 15:38:16

MongodbCursor

2009-07-08 09:21:09

Linux安裝JDK

2009-07-07 14:00:25

JDK日志Handler

2009-07-08 13:22:30

JDK源碼分析Set
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品7777777 | 久久久久久毛片免费观看 | a成人| 欧美综合一区 | 精品日韩一区 | 亚洲一区二区国产 | 99精品视频在线观看 | 午夜精品一区二区三区免费视频 | 狠狠av| 欧美一级视频免费看 | 国产精品一区二区视频 | 午夜网站视频 | 97色综合| 一区二区在线不卡 | 欧美a在线观看 | 国产一区不卡 | 在线色网 | 91视视频在线观看入口直接观看 | 久久国产精品一区 | 在线免费观看a级片 | 蜜桃视频在线观看免费视频网站www | 一区二区三区精品视频 | av黄色在线观看 | 国产精品久久久一区二区三区 | 欧美三区视频 | 福利社午夜影院 | 97国产一区二区 | 亚洲综合久久网 | 日日做夜夜爽毛片麻豆 | 91视在线国内在线播放酒店 | 伊人久久成人 | 亚洲免费在线观看 | 一本大道久久a久久精二百 欧洲一区二区三区 | 成人国产精品久久 | 日韩成人av在线 | 国产欧美日韩综合精品一区二区 | 刘亦菲国产毛片bd | 一区二区手机在线 | 国产精品美女久久久久aⅴ国产馆 | 四虎影视一区二区 | 国产精品久久久久久久一区探花 |