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

相关推荐

  • Oracle中出现ORA-00600内部错误代码怎么办

    技术Oracle中出现ORA-00600内部错误代码怎么办这篇文章将为大家详细讲解有关Oracle中出现ORA-00600内部错误代码怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获

    攻略 2021年11月17日
  • 前端三大框架

    技术前端三大框架 前端三大框架前台的三个框架是指:1.Angular,是一款前端JavaScriptMVC框架来构建用户界面;2.React,JavaScript框架用于构建用户界面;3.Vue,是一套

    礼包 2021年10月28日
  • sqlserver登陆后报不能为空不能为null的错误该怎么办

    技术sqlserver登陆后报不能为空不能为null的错误该怎么办sqlserver登陆后报不能为空不能为null的错误该怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴

    攻略 2021年12月1日
  • Hadoop 简介

    技术Hadoop 简介 Hadoop 简介Hadoop 是什么Hadoop 是一个提供分布式存储和计算的开源软件框架,它具有无共享、高可用(HA)、弹性可扩展的特点,非常适合处理海量数量。Hadoop

    礼包 2021年11月23日
  • 221. 最大正方形

    技术221. 最大正方形 221. 最大正方形在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
    来源:力扣(LeetCode)
    链接:https://le

    礼包 2021年12月21日
  • n代表零线还是火线,火线和零线哪个是L哪个是N

    技术n代表零线还是火线,火线和零线哪个是L哪个是N零线为〔N〕n代表零线还是火线,火线为〔L〕。市电的交流供电电压为220伏特(V)。包括一根零线〔N〕和一根火线〔L〕,零线接地(地为零)所以称之为零线。   在电工学中

    生活 2021年10月25日