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

相关推荐

  • 格力空调e6,格力空调显示E6是什么故障

    技术格力空调e6,格力空调显示E6是什么故障格力空调显示E6原因分析格力空调e6:1、通信故障。说明空调是变频的,需要检查一下与室外机的黑色连线部分是否有松脱,没有的话,就需要打人工,让他们安排售后来检查一下。
    2、内机

    生活 2021年10月23日
  • Disruptor中锁对性能有什么影响

    技术Disruptor中锁对性能有什么影响本篇文章给大家分享的是有关Disruptor中锁对性能有什么影响,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Di

    攻略 2021年10月21日
  • MySQL 8.0主从复制模型的示例分析

    技术MySQL 8.0主从复制模型的示例分析这篇文章给大家分享的是有关MySQL 8.0主从复制模型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、MySQL主从复制模型一切都要从

    攻略 2021年11月6日
  • 如何在Cubieboard上搭建个人云存储

    技术怎么在Cubieboard上搭建个人云存储这篇文章将为大家详细讲解有关怎么在Cubieboard上搭建个人云存储,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备工作

    攻略 2021年12月13日
  • mysql中的变量赋值是怎样的

    技术mysql中的变量赋值是怎样的这期内容当中小编将会给大家带来有关mysql中的变量赋值是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。DECLARE局部变量DECLARE v

    攻略 2021年11月16日
  • 怎么进行Nginx配置文件引用

    技术怎么进行Nginx配置文件引用怎么进行Nginx配置文件引用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Nginx配置文件有很多需要我们注意很多问

    攻略 2021年11月25日