Java 中 Boolean 和 boolean的区别

Java 中 Boolean 和 boolean的区别上次一个同学问 Boolean 类型的值不是只有 true 和 false 两种吗 为什么他定义的属性出现了 null 值 我们应该先明确一点 boolean 是 Java 的基本数据类型 Boolean 是 Java 的一个类 boolean 类型会在 赋零值 阶段给属性赋 false 而 Boolean 是一个类 会在 赋零值 阶段给对象赋 null 如果是静态属性 会在类加载时被赋值 如果是普通类属性 会在实例化对象时赋值 这两点可以了解一下 类加载机制 和 对象创建过程 类加载机制

​上次一个同学问,Boolean 类型的值不是只有 truefalse 两种吗?为什么他定义的属性出现了 null 值?

我们应该先明确一点,booleanJava 的基本数据类型,BooleanJava 的一个类。boolean 类型会在“赋零值”阶段给属性赋 false。而 Boolean 是一个类,会在“赋零值”阶段给对象赋 null

如果是静态属性,会在类加载时被赋值。如果是普通类属性,会在实例化对象时赋值。这两点可以了解一下“类加载机制”和“对象创建过程”。

类加载机制:
  • 加载:根据类的全名获取类的二进制字节流,将类加载进内存并在堆中生成一个代表这个类的 Class 对象,作为方法区数据的访问入口
  • 验证:验证 class 文件中的字节流是否符合 JVM 规范
  • 准备:在方法区中为类的静态属性分配内存,并初始化默认值(boolean 的默认值是 falseBoolean 的默认值是 null
  • 解析:将常量池中的符号引用转化为直接引用,可以理解为对象引用转成指针
  • 初始化:真正开始执行类中的代码,静态属性赋值和静态块
对象实例化过程:
  • 检查类是否已经被加载(双亲委派)
  • 给对象分配内存空间(指针碰撞)
  • 零值初始化(false / null
  • 设置对象头(对象分代年龄等信息)
  • 执行 <init> 方法(属性初始化,语句块和构造方法)

所以说,Boolean只是被加载了,还没有被实例化,在被实例化之前并没有分配内存,所以是 null

接下来我们可以看看 Boolean 的属性和构造方法,了解一下它如何包装 boolean
// final boolean类型的属性,通过构造方法注入值 private final boolean value;// 构造方法 Boolean a = true 实际上就是调用这个方法 public Boolean(boolean value) { 
    this.value = value; }// 构造方法 public Boolean(String s) { 
    this(parseBoolean(s)); } 

对于其他的属性和方法,可以自行查看都比较简单

简单来说就是,boolean 定义的属性一定要有值,如果 Boolean 对象值为 null,解包过程中就会出现NPE。

想象一种场景:你女票问你:你爱我吗?但你没听清。如果你是 Boolean 就会回答,我没听清(null),如果你是 boolean 就会回答,不爱了 (false)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233879.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月14日 下午1:01
下一篇 2025年6月14日 下午1:22


相关推荐

  • CTF密码总结(随时更新)

    CTF密码总结(随时更新)1 base64 特点 由 a z A Z 0 1 以及 和 组成 有的末尾有若干 看到末尾有 就可尝试 base64 解码在线解码网站 https base64 us

    2025年6月7日
    8
  • PL/Sql 访录被用户锁定

    PL/Sql 访录被用户锁定

    2021年9月1日
    52
  • 天涯共此双11——天猫升级港澳台“购物天堂”

    天涯共此双11——天猫升级港澳台“购物天堂”香港北区上水60多年的老字号正和隆酱油没想过会出名。这家专注服务街坊的小店不在乎“酱香巷子深”,门店一半是透明及地的塑胶门帘,一半是一块块拼接起来的黄色纸板箱。来的都是熟客,所谓收银台就是个铅桶,顾客要付钱就把铅桶拉下来,付钱、找零,再把铅桶放上去。这是父辈们持续了半个多世纪的生意。到了店主女儿这里,事情开始改变。她赶时髦,在店里放了有支付宝二维码的蓝白…

    2022年10月5日
    4
  • Java上传文件到数据库「建议收藏」

    Java上传文件到数据库「建议收藏」Java上传文件到数据库   首先在开始本文之前推荐一篇我非常喜欢的博主——孤傲苍狼的一篇相关博文。     JavaWeb学习总结(五十)——文件上传和下载        http://www.cnblogs.com/xdp-gacl/p/4200090.html     本文主要介绍如何将文件上传到服务器,并以二进制字符流的形式存入数据库。

    2025年9月14日
    8
  • windows远程桌面和teamviewer_windows远程桌面端口

    windows远程桌面和teamviewer_windows远程桌面端口Windows的远程桌面输错了一次密码,然后就怎么都连接不上了,查了半天发现傻缺360会默认屏蔽Windows的远程桌面和数据库连接…..大家没事都卸载了360吧转载于:https://www.cnblogs.com/JiangOil/p/10561828.html…

    2025年11月19日
    7
  • python suds_python suds 一坑

    python suds_python suds 一坑当被调用服务的返回xml内容值不是按照wsdl文件描述定义的,就莫名奇妙返回suds.WebFault没有更多详细信息!于是将源码解压,并插入到sys.path[0],通过设置断点的方式找出非标准的返回报文到底在说啥。从而调整对应参数。suds-0.4/suds/bindings/binding.py(246~268)defget_fault(self,reply):”””Extract…

    2025年8月9日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号