Java 中 Boolean 和 boolean的区别

本文详细介绍了Java中基本数据类型boolean与包装类Boolean的区别,包括它们在类加载和对象创建过程中的初始值设定。讲解了类加载的五个阶段以及对象实例化的步骤。同时,提到了在使用Boolean时可能遇到的NullPointerException风险,并引用阿里巴巴开发手册的建议。文章以幽默的方式阐述了学习Java语言的重要性,强调了自我反省和不断学习的精神。
摘要由CSDN通过智能技术生成

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

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

    加载:根据类的全名获取类的二进制字节流,将类加载进内存并在堆中生成一个代表这个类的 Class 对象,作为方法区数据的访问入口

    验证:验证 class 文件中的字节流是否符合 JVM 规范

    准备:在方法区中为类的静态属性分配内存,并初始化默认值(boolean 的默认值是 false,Boolean 的默认值是 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 使用过程中有一个风险点,阿里巴巴开发手册也写得非常好
ali

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

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

之后就会有个狗头被打爆。哈哈哈!

学无止境,我永远都是学习者 ,我还是一个新手 ,经验有限 ,世界这么忙 ,我刚好有空写下了自己的心得 ,希望对大家有所帮助 ,缘分让我们一起,你们的赞赏,支持,关注就是对我莫大的支持,哪里写的不好的,也欢迎大家评论留言交流,希望大家多多指点,我将不胜感激,也希望我们共同进步。

只有自己深深痛过,才能体会别人的痛,于是难得自我们反省。学习也是如此,只有我们自我反省思考才会进步,正所谓吾日三省吾身就是这样的道理。我们一定要努力学好java语言。

读书破万卷,下笔如有神,我们只有把这些该学的学好,才会实现自己的进步,这些都是非常重要的内容,在javascript中都是重点,我们一定要牢记。

咱们活着不能与草木同腐,不能醉生梦死,枉度人生,要有所作为。学习就是这样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值