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

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

本文介绍了如何分析JDK源代码Java.lang.Boolean内容非常详细,感兴趣的朋友可以参考一下,希望对大家有所帮助。

JDK源代码(jdk 1.5 b2)的研究是一个很大的范畴,所以今天,我们开始解剖Java.lang.Boolean

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

publicatefindclassbooleanshava . io . serializable,compatible { privatefindibooleannvalue;}显然,所有的成员变量都是final类型,必须是不可变类。该布尔值与字符串相同。一旦执行了构造函数,实例的状态就不能更改。

JDK源代码中有两个构造函数:

public Boolean(boolean value){ this . value=value;} public布尔值(字符串){ this(to Boolean(s));}都很简单,就不多说了。

另外要注意的是,Java.lang.Boolean类实际上只有两个不同状态的实例:一个用true包装,另一个用false包装,Java.lang.Boolean是不可变类。因此,内存中处于相同状态的布尔实例可以完全共享,不需要用new创建很多实例。因此,布尔类还提供了两个静态变量:

publicationstatifinbooleanTRUe=新工具(true);publicationstatifinbooleanFalse=new Boolean(false);这两个变量在类加载器加载时被实例化,并声明为final,因此它们不能指向其他实例。

提供这两个静态变量是为了允许开发人员直接使用它们,而不是每次都更新一个布尔值,这不仅节省了内存,还避免了创建新实例的时间成本。

因此,使用

Booleanb=布尔值。真;比较

Booleanb=newBoolean(真);好多了。

如果您遇到以下情况:

booleanb=NewBoolean(var);如果必须根据布尔变量创建一个布尔实例会怎么样?

您建议使用布尔提供的静态工厂方法:

booleanb=boolean . value of(var);

这样,您可以避免创建新实例。查看valueOf()静态方法:

publicationstatibooleavalueof(booleanb){ return(b?true : false);}这个静态工厂方法仍然返回两个静态变量TRUE和FALSE中的一个,而不是一个新的布尔值。虽然Java.lang.Boolean非常简单,占用的内存也很少,但是用new创建一个复杂类的实例的成本可能会非常高,可以使用factory方法方便地缓存实例,这对客户端来说是透明的。所以,如果可以用工厂的方法,就不要用新的。

只有两种状态与布尔不同。Integer也是不可变类,但是有上亿个状态,不可能用静态实例缓存所有状态。不过SUN的工程师做了一些优化。整数类缓存从-128到127的整数的256个状态。如果是整数。使用valueof (int I),传入的int范围正好在此范围内,并且返回一个静态实例。

hasode()的方法很奇怪。两种布尔值的哈希码分别为1231和1237。据估计,写Boolean.java的人特别喜欢这两个数字:

publishingtashcode(){ return value?1231:1237;}equals()方法也很简单。只有布尔类型且值相等的对象才能返回真:

public booleaneequals(Objectobj){ if(ObjinstanceofBoolean){ return value==((布尔值)obj)。booleanVaLue();} returnfalse}关于如何解析JDK源码Java.lang.Boolean的分析就分享到这里了,希望。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107932.html

(0)

相关推荐

  • Python中异常处理用法有哪些

    技术Python中异常处理用法有哪些本篇内容主要讲解“Python中异常处理用法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中异常处理用法有哪些”吧!为了

    攻略 2021年11月30日
  • 设计模式21-状态模式,State)

    技术设计模式21-状态模式,State) 设计模式21-状态模式(State)如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。设计模式21-状态模式(S

    礼包 2021年10月28日
  • 年度考核主管领导评语,年底考核领导班子考核评语

    技术年度考核主管领导评语,年底考核领导班子考核评语做为一个公司的领导,对员工的评价标准是全面的,包括员工的工作能力,员工的生活,学习,思想上都要做一个评价,这是与公司的发展,公司的业绩都是挂钩的,以下是对员工的个人工作评

    生活 2021年10月22日
  • XamarinAndroid组件中RecylerView适配器如何使用动画

    技术XamarinAndroid组件中RecylerView适配器如何使用动画这篇文章主要介绍XamarinAndroid组件中RecylerView适配器如何使用动画,文中介绍的非常详细,具有一定的参考价值,感兴趣的小

    攻略 2021年12月3日
  • 数模技巧不用for循环且使用ggplot2如何实现地图上连线

    技术数模技巧不用for循环且使用ggplot2如何实现地图上连线小编给大家分享一下数模技巧不用for循环且使用ggplot2如何实现地图上连线,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 前文回顾

    攻略 2021年11月14日
  • 宁冈县,黄河界保卫战发生于江西哪个县

    技术宁冈县,黄河界保卫战发生于江西哪个县宁冈县宁冈县。
    1928年8月,湘赣敌军乘毛泽东带领三十一团一营前往湘南迎还红军大队之机,纠集七个团的兵力会攻井冈山军事根据地。8月30日,吴尚、王均部各两个团进攻黄洋界哨口。红军

    生活 2021年10月29日