如何解析JDK源码Java.lang.Boolean的浅析

介绍

这篇文章给大家介绍如何解析JDK源码. lang。布尔的浅析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

JDK源码(JDK 1.5 b2)的研究是一个很大的范畴,那么今天先对Java.lang.Boolean开始解剖。

首先我们来看JDK源码中Java.lang.Boolean的代码,剔除所有的方法和静态变量,Java.lang.Boolean的核心代码如下:

 public  final  class  Boolean  implements  java.io.Serializable, Comparable , {private 才能;final  Boolean 价值;,,}

很明显,凡是成员变量都是最终的类型的,一定是不可变类,这个布尔和字符串一样,一旦构造函数执行完毕,实例的状态就不能再改变了。

JDK源码中Java.lang.Boolean的构造函数有两个:

 public 布尔(Boolean 价值),{=this.value 才能;价值;,,},,public 布尔(String  s),{这才能(toBoolean (s));,,} 

都很简单就不多说了。

另外注重到Java.lang.Boolean类实际上只有两种不同状态的实例:一个包装真,一个包装错的,. lang。布尔又是不可变类,所以在内存中相同状态的布尔实例完全可以共享,不必用新的创建很多实例。因此布尔类还提供两个静态变量:

 public  static  final  Boolean  TRUE =, new 布尔(真正);,,public  static  final  Boolean  FALSE =, new 布尔(假);

这两个变量在类装入器装载时就被实例化,并且申明为决赛,不能再指向其他实例。

提供这两个静态变量是为了让开发者直接使用这两个变量而不是每次都新的一个布尔值,这样既节省内存又避免了创建一个新实例的时间开销。

因此,用

 Boolean  b =, Boolean.TRUE; 

 Boolean  b =, new 布尔(真正);

要好得多。

假如碰到下面的情况:

 Boolean  b =, new 布尔(var); 

一定要根据一个布尔变量来创建布尔实例怎么办?

推荐你使用布尔提供的静态工厂方法:

 Boolean  b =,避免造成(var); 


这样就可以避免创建新的实例,不信看看返回对象的值()静态方法:

 public  static  Boolean 返回对象的值(Boolean  b), {return 才能;(b  ?, TRUE :, false);,,} 

这个静态工厂方法返回的仍然是两个静态变量真和假之一,而不是新的一个布尔出来,虽然. lang。布尔非常简单,占用的内存也很少,但是一个复杂的类用新的创建实例的开销可能非常大,而且,使用工厂方法可以方便的实现缓存实例,这对客户端是透明的,所以,能用工厂方法就不要用新的。

和布尔只有两种状态不同,整数也是不可变类,但是状态上亿种,不可能用静态实例缓存所有状态,不过,太阳的工程师还是作了一点优化,整数类缓存了-128到127这256个状态的整数,假如使用整数。返回对象的值(int i),传入的int范围正好在此内,就返回静态实例。

hashCode()方法很希奇,两种布尔的散列码分别是1231和1237,估计写Boolean.java的人对这两个数字有非凡偏好:

 public  int  hashCode (), {return 才能;value  ?, 1231,:, 1237;,,} 

=()方法也很简单,只有布尔类型的对象并且价值相等才返真的:

 public  boolean =(Object  obj), {if 才能;(obj  instanceof 布尔),{return 才能;value ==,((布尔)obj) .booleanValue ();,,},, return 假,,,}

关于如何解析JDK源码Java.lang.Boolean的浅析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

如何解析JDK源码Java.lang.Boolean的浅析