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

相关推荐

  • 如何解析sqlmap注入参数

    技术如何解析sqlmap注入参数这篇文章将为大家详细讲解有关如何解析sqlmap注入参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、指定数据库类型 --dbmsht

    攻略 2021年12月9日
  • 怎么实现提示用户退出程序

    技术怎么实现提示用户退出程序这篇文章主要讲解了“怎么实现提示用户退出程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现提示用户退出程序”吧!青铜级别# 青铜 im

    攻略 2021年10月22日
  • 鬼的笔顺,鬼字里加一个住多一横念什么

    技术鬼的笔顺,鬼字里加一个住多一横念什么魋 tuí 古书上说的一种毛浅而赤黄鬼的笔顺、形似小熊的野兽。姓。笔画数:17; 部首:鬼; 笔顺编号:32511355432411121 详细解释: 魋 tuí 【名】 神兽〖g

    生活 2021年10月21日
  • 怎么打出拼音声调,怎么打出汉语拼音声调符号

    技术怎么打出拼音声调,怎么打出汉语拼音声调符号打开WORD后怎么打出拼音声调,选择“插入→符号”,在符号→子集”选项里选择“进格的修饰字符”,里面就有汉语的声调符号.如图所示. 拼音声调
    拼音声调是指普通话中的声调,通

    生活 2021年10月21日
  • 为什么应该选择美国服务器服务器租用美国

    技术为什么应该选择美国服务器服务器租用美国在海外服务器上搭建您的网站时,美国服务器都是您应该考虑的选项。以下是为什么应该选择美国服务器的原因专业技术支持 人们应该选择美国服务器租用服务的主要原因是它提供的技术支持。无论发

    礼包 2021年12月17日
  • 如何使用mysqldump对mysql进行备份和恢复

    技术如何使用mysqldump对mysql进行备份和恢复这篇文章给大家分享的是有关如何使用mysqldump对mysql进行备份和恢复的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqld

    攻略 2021年11月3日