如何解析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)

相关推荐

  • 怎么修改linux中rac上IP地址

    技术怎么修改linux中rac上IP地址本篇内容主要讲解“怎么修改linux中rac上IP地址”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么修改linux中rac上IP地

    攻略 2021年11月5日
  • 如何用Python爬取酷我音乐

    技术如何用Python爬取酷我音乐如何用Python爬取酷我音乐,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前两天听了一下酷我音乐官网的音

    攻略 2021年10月26日
  • 关于安全的手抄报,关于校园安全的手抄报资料

    技术关于安全的手抄报,关于校园安全的手抄报资料关于校园安全的手抄报资料 有奖励写回答共13个回答
    张一苗果果
    聊聊关注成为第3位粉丝
    不跳楼梯,不从高处往下跳,不爬栏杆,不滑扶手,不做有危险的活动关于安全的手抄报。

    生活 2021年10月25日
  • 怎样做酸菜鱼家常做法,酸菜鱼的家庭简单做法有哪些

    技术怎样做酸菜鱼家常做法,酸菜鱼的家庭简单做法有哪些家庭简单酸菜鱼做法 材料 黑鱼怎样做酸菜鱼家常做法,酸菜,泡辣椒,葱,蒜,干红辣椒,姜,花椒,生粉,鸡汤,料酒,盐,糖,生姜粉
    做法
    1、 鱼切成薄片,
    2、 加

    生活 2021年11月1日
  • SpringCloud分布式微服务b2b2c电子商务中​怎么用turbine+hystrix-dashboard监听两个消费者服务

    技术SpringCloud分布式微服务b2b2c电子商务中​怎么用turbine+hystrix-dashboard监听两个消费者服务这篇文章主要介绍SpringCloud分布式微服务b2b2c电子商务中怎么用turbi

    攻略 2021年11月19日
  • MSSQL2005数据附加失败报错3456的解决办法

    技术MSSQL2005数据附加失败报错3456的解决办法MSSQL2005数据附加失败报错3456的解决办法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望

    攻略 2021年12月1日