iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中Boolean和boolean的区别是什么
  • 541
分享到

Java中Boolean和boolean的区别是什么

2023-07-02 16:07:15 541人浏览 薄情痞子
摘要

这篇“Java中Boolean和boolean的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中Boole

这篇“Java中Boolean和boolean的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中Boolean和boolean的区别是什么”文章吧。

前言

有人问,Boolean 类型的值不是只有 true 和 false 两种吗?为什么他定义的属性出现了 null 值?

我们应该先明确一点,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 使用过程中有一个风险点,阿里巴巴开发手册也写得非常好

Java中Boolean和boolean的区别是什么

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

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

之后就会被打。

补充:Boolean与boolean性能探究

针对Boolean与true

单纯从源码角度看不出来那个性能上更加好;大布尔也是初始化了两个static对象

源码截图如下:

Java中Boolean和boolean的区别是什么

写了一个测试类:测试方式(获取大布尔类型true的时间 获取小布尔类型true的时间,通过100、1000、10000、100000次 看看那个时间更少的次数更多)

测试代码如下:

public class Test {public static Boolean A() {return Boolean.TRUE;}public static boolean D() {return true;}public static String get() {long i = 0L;long j = 0L;for (int n = 0; n < 100000; n++) {long startTime = System.nanoTime();D();long endTime = System.nanoTime();long booleanTime = endTime - startTime;long start = System.nanoTime();A();long end = System.nanoTime();long booleanca = end - start;if (booleanca > booleanTime) {i = i + 1;} else {j = j + 1;}}return i+" "+j;}public static void main(String[] args) {        System.out.println("---100000次的比较结果---->"+get());}}

执行结果如下图:

Java中Boolean和boolean的区别是什么

以上就是关于“Java中Boolean和boolean的区别是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Java中Boolean和boolean的区别是什么

本文链接: https://www.lsjlt.com/news/343357.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中Boolean和boolean的区别是什么
    这篇“Java中Boolean和boolean的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中Boole...
    99+
    2023-07-02
  • Java中Boolean和boolean的区别详析
    目录前言类加载机制:对象实例化过程:补充:Boolean与boolean性能探究总结前言 ​上次一个同学问,Boolean 类型的值不是只有 true 和 false 两种吗?为什么...
    99+
    2024-04-02
  • mysql中bit和boolean类型的区别是什么
    在MySQL中,BIT和BOOLEAN类型都用于存储逻辑值,但它们有一些区别。 BIT类型: BIT类型用于存储比特位,可以存...
    99+
    2024-04-09
    mysql
  • java boolean类的用法是什么
    Java中的boolean类时一个包装类,用于将基本数据类型boolean封装成对象。boolean类的主要用途是在需要将boole...
    99+
    2023-09-23
    java
  • java中boolean怎么使用
    在Java中,boolean类型用于表示两个可能的值:true和false。它用于逻辑判断和条件控制。以下是boolean类型的使用...
    99+
    2023-09-25
    java
  • mybatis中boolean判断的方法是什么
    在MyBatis中,可以使用<if>标签来进行boolean判断。例如,可以在<select>或&...
    99+
    2024-04-02
  • java中boolean类怎么使用
    Boolean类是Java中的一个包装类,用于封装基本数据类型boolean的值。Boolean类提供了一些方法和常量来操作和表示b...
    99+
    2023-09-29
    java
  • java中this和super的区别是什么
    java中this和super的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、We...
    99+
    2023-06-14
  • Java中println和print的区别是什么
    在Java中,println和print都是用来打印输出的方法,但它们之间有一些区别。 println方法会在输出文本后自动换行...
    99+
    2024-03-05
    Java
  • Java中Exception和Error的区别是什么
    这篇文章主要介绍“Java中Exception和Error的区别是什么”,在日常操作中,相信很多人在Java中Exception和Error的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中...
    99+
    2023-06-20
  • Java中Lock和Synchronized的区别是什么
    这篇文章主要讲解了“Java中Lock和Synchronized的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中Lock和Synchronized的区别是什么”吧!1. ...
    99+
    2023-06-30
  • java中private和public的区别是什么
    在Java中,private和public是两个访问修饰符,用于控制类、方法和变量的访问权限。1. private:private是...
    99+
    2023-08-24
    java private public
  • java中runnable和callable的区别是什么
    Runnable和Callable都是实现多线程的方式,但是有一些区别:1. 返回值:Runnable不返回结果,只是执行一些任务,...
    99+
    2023-08-15
    java callable runnable
  • Java中Cookie和Session的区别是什么
    这篇文章主要介绍“Java中Cookie和Session的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中Cookie和Session的区别是什么”文章能帮助大家解决问题。会话技术...
    99+
    2023-07-02
  • java中for和foreach的区别是什么
    在Java中,for循环和foreach循环(也称为增强for循环)是两种不同的循环方式。 for循环: for循环是一种传统的循...
    99+
    2024-04-02
  • Java中的this和super区别是什么
    这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和supe...
    99+
    2023-06-25
  • java中Overload和Override的区别是什么
    这篇文章主要为大家展示了“java中Overload和Override的区别是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中Overload和Ov...
    99+
    2024-04-02
  • Java中Integer和int的区别是什么
    这篇文章主要介绍Java中Integer和int的区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、基本概念(重要)Integer 是 int 的包装类,int 则是 java 的一种基本数据类型;Inte...
    99+
    2023-06-15
  • java中continue和break的区别是什么
    在Java中,continue和break是两种控制流语句,它们的作用有所不同。 break语句用于立即退出最内层的循环或者swi...
    99+
    2024-03-05
    java
  • java中arraylist和linkedlist的区别是什么
    ArrayList和LinkedList都是Java中常用的集合类,它们之间的主要区别在于内部数据结构和操作效率。 内部数据结构:...
    99+
    2024-03-12
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作