亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中Boolean和boolean的區(qū)別詳析

 更新時(shí)間:2022年07月12日 16:01:47   作者:mkii_hong  
boolean是基本數(shù)據(jù)類型Boolean是它的封裝類,和其他類一樣,有屬性有方法,可以new,下面這篇文章主要給大家介紹了關(guān)于Java中Boolean和boolean區(qū)別的相關(guān)資料,需要的朋友可以參考下

前言

?上次一個(gè)同學(xué)問,Boolean 類型的值不是只有 true 和 false 兩種嗎?為什么他定義的屬性出現(xiàn)了 null 值?

我們應(yīng)該先明確一點(diǎn),boolean 是 Java 的基本數(shù)據(jù)類型,Boolean 是 Java 的一個(gè)類。boolean 類型會在“賦零值”階段給屬性賦 false。而 Boolean 是一個(gè)類,會在“賦零值”階段給對象賦 null。

如果是靜態(tài)屬性,會在類加載時(shí)被賦值。如果是普通類屬性,會在實(shí)例化對象時(shí)賦值。這兩點(diǎn)可以了解一下“類加載機(jī)制”和“對象創(chuàng)建過程”。

類加載機(jī)制:

  • 加載:根據(jù)類的全名獲取類的二進(jìn)制字節(jié)流,將類加載進(jìn)內(nèi)存并在堆中生成一個(gè)代表這個(gè)類的 Class 對象,作為方法區(qū)數(shù)據(jù)的訪問入口
  • 驗(yàn)證:驗(yàn)證 class 文件中的字節(jié)流是否符合 JVM 規(guī)范
  • 準(zhǔn)備:在方法區(qū)中為類的靜態(tài)屬性分配內(nèi)存,并初始化默認(rèn)值(boolean 的默認(rèn)值是 false,Boolean 的默認(rèn)值是 null)
  • 解析:將常量池中的符號引用轉(zhuǎn)化為直接引用,可以理解為對象引用轉(zhuǎn)成指針
  • 初始化:真正開始執(zhí)行類中的代碼,靜態(tài)屬性賦值和靜態(tài)塊

對象實(shí)例化過程:

  • 檢查類是否已經(jīng)被加載(雙親委派)
  • 給對象分配內(nèi)存空間(指針碰撞)
  • 零值初始化(false / null)
  • 設(shè)置對象頭(對象分代年齡等信息)
  • 執(zhí)行 <init> 方法(屬性初始化,語句塊和構(gòu)造方法)

所以說,Boolean只是被加載了,還沒有被實(shí)例化,在被實(shí)例化之前并沒有分配內(nèi)存,所以是 null

接下來我們可以看看 Boolean 的屬性和構(gòu)造方法,了解一下它如何包裝 boolean

// final boolean類型的屬性,通過構(gòu)造方法注入值
private final boolean value;
?
// 構(gòu)造方法 Boolean a = true 實(shí)際上就是調(diào)用這個(gè)方法
public Boolean(boolean value) {
    this.value = value;
}
?
// 構(gòu)造方法
public Boolean(String s) {
    this(parseBoolean(s));
}

對于其他的屬性和方法,可以自行查看都比較簡單

關(guān)于 Boolean 使用過程中有一個(gè)風(fēng)險(xiǎn)點(diǎn),阿里巴巴開發(fā)手冊也寫得非常好

簡單來說就是,boolean 定義的屬性一定要有值,如果 Boolean 對象值為 null,解包過程中就會出現(xiàn)NPE。

想象一種場景:你女票問你:你愛我嗎?但你沒聽清。如果你是 Boolean 就會回答,我沒聽清(null),如果你是 boolean 就會回答,不愛了 (false)

之后就會被打。

補(bǔ)充:Boolean與boolean性能探究

針對Boolean與true

單純從源碼角度看不出來那個(gè)性能上更加好;大布爾也是初始化了兩個(gè)static對象

源碼截圖如下:

寫了一個(gè)測試類:測試方式(獲取大布爾類型true的時(shí)間 獲取小布爾類型true的時(shí)間,通過100、1000、10000、100000次 看看那個(gè)時(shí)間更少的次數(shù)更多)

測試代碼如下:

public class Test {	
	/**
	 * 方法一
	 * 
	 * @return
	 */
	public static Boolean A() {
		return Boolean.TRUE;
	}
	/**
	 * 方法二
	 * 
	 * @return
	 */
	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次的比較結(jié)果---->"+get());
	}
}

執(zhí)行結(jié)果如下圖:

總結(jié)

到此這篇關(guān)于Java中Boolean和boolean區(qū)別的文章就介紹到這了,更多相關(guān)Java Boolean和boolean區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot詳解緩存redis實(shí)現(xiàn)定時(shí)過期方法

    Spring boot詳解緩存redis實(shí)現(xiàn)定時(shí)過期方法

    本篇文章分享的就是spring boot中的一個(gè)輪子,spring cache注解的方式實(shí)現(xiàn)接口數(shù)據(jù)緩存。默認(rèn)的配置想非常簡單,但是有一個(gè)弊端是緩存數(shù)據(jù)為永久緩存,本次將介紹如何設(shè)置接口緩存數(shù)據(jù)的過期時(shí)間
    2022-07-07
  • 淺談springboot多模塊(modules)開發(fā)

    淺談springboot多模塊(modules)開發(fā)

    這篇文章主要介紹了淺談springboot多模塊(modules)開發(fā),詳細(xì)的介紹了springboot多模塊的實(shí)現(xiàn),有興趣的可以了解一下
    2017-09-09
  • 通過java備份恢復(fù)mysql數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    通過java備份恢復(fù)mysql數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    這篇文章主要介紹了如何通過java備份恢復(fù)mysql數(shù)據(jù)庫,其實(shí)一般情況下通過bat或sh就可以,這里主要是介紹了java的實(shí)現(xiàn)思路,喜歡的朋友可以參考下
    2013-09-09
  • 哈希表在算法題目中的實(shí)際應(yīng)用詳解(Java)

    哈希表在算法題目中的實(shí)際應(yīng)用詳解(Java)

    散列表(Hash?table,也叫哈希表)是根據(jù)關(guān)鍵碼值(Key?value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于哈希表在算法題目中的實(shí)際應(yīng)用,文中介紹的方法是Java,需要的朋友可以參考下
    2024-03-03
  • 深入了解java.util.Arrays的使用技巧

    深入了解java.util.Arrays的使用技巧

    在這篇文章中,我們將來帶大家看看?java.util.Arrays?,我們可以使用?Arrays?創(chuàng)建,比較,排序,搜索,stream?和轉(zhuǎn)化數(shù)組,感興趣的小伙伴可以了解一下
    2023-02-02
  • Java中的CopyOnWriteArrayList原理詳解

    Java中的CopyOnWriteArrayList原理詳解

    這篇文章主要介紹了Java中的CopyOnWriteArrayList原理詳解,如源碼所示,CopyOnWriteArrayList和ArrayList一樣,都在內(nèi)部維護(hù)了一個(gè)數(shù)組,操作CopyOnWriteArrayList其實(shí)就是在操作內(nèi)部的數(shù)組,需要的朋友可以參考下
    2023-12-12
  • SpringBoot服務(wù)設(shè)置禁止server.point端口的使用

    SpringBoot服務(wù)設(shè)置禁止server.point端口的使用

    本文主要介紹了SpringBoot服務(wù)設(shè)置禁止server.point端口的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • MybatisPlus中的insert操作詳解

    MybatisPlus中的insert操作詳解

    這篇文章主要介紹了MybatisPlus中的insert操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java中的AWT事件處理問題

    java中的AWT事件處理問題

    這篇文章主要介紹了java中的AWT事件處理問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring中的FactoryBean代碼示例

    spring中的FactoryBean代碼示例

    這篇文章主要介紹了spring中的FactoryBean代碼示例,涉及FactoryBean的實(shí)現(xiàn)等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10

最新評論