最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

類(lèi)加載機(jī)制:

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

對(duì)象實(shí)例化過(guò)程:

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

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

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

// final boolean類(lèi)型的屬性,通過(guò)構(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));
}

對(duì)于其他的屬性和方法,可以自行查看都比較簡(jiǎn)單

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

簡(jiǎn)單來(lái)說(shuō)就是,boolean 定義的屬性一定要有值,如果 Boolean 對(duì)象值為 null,解包過(guò)程中就會(huì)出現(xiàn)NPE。

想象一種場(chǎng)景:你女票問(wèn)你:你愛(ài)我嗎?但你沒(méi)聽(tīng)清。如果你是 Boolean 就會(huì)回答,我沒(méi)聽(tīng)清(null),如果你是 boolean 就會(huì)回答,不愛(ài)了 (false)

之后就會(huì)被打。

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

針對(duì)Boolean與true

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

源碼截圖如下:

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

測(cè)試代碼如下:

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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)石頭剪刀布游戲

    Java實(shí)現(xiàn)石頭剪刀布游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)石頭剪刀布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • mybatis某些字段無(wú)法映射成功的解決

    mybatis某些字段無(wú)法映射成功的解決

    這篇文章主要介紹了mybatis某些字段無(wú)法映射成功的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot中的PropertySource原理詳解

    SpringBoot中的PropertySource原理詳解

    這篇文章主要介紹了SpringBoot中的PropertySource原理詳解,PropertySource?是一個(gè)非常重要的概念,它允許您在應(yīng)用程序中定義屬性,并將這些屬性注入到?Spring?環(huán)境中,需要的朋友可以參考下
    2023-07-07
  • 一文詳解Java中的Stream的匯總和分組操作

    一文詳解Java中的Stream的匯總和分組操作

    這篇文章主要為大家詳細(xì)介紹了Java8中的Stream的匯總和分組的操作,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-09-09
  • springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例

    springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例

    本文主要介紹了springboot lua檢查redis庫(kù)存的實(shí)現(xiàn)示例,為了優(yōu)化性能,通過(guò)Lua腳本實(shí)現(xiàn)對(duì)多個(gè)馬戲場(chǎng)次下的座位等席的庫(kù)存余量檢查,感興趣的可以了解一下
    2024-09-09
  • JAVA泛型之泛型方法的定義和使用方式

    JAVA泛型之泛型方法的定義和使用方式

    這篇文章主要介紹了JAVA泛型之泛型方法的定義和使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring DevTools的介紹

    Spring DevTools的介紹

    今天小編就為大家分享一篇關(guān)于Spring DevTools的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 帶你了解Java中的異常處理(上)

    帶你了解Java中的異常處理(上)

    這篇文章主要介紹了Java異常處理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)java,感興趣的朋友可以了解下
    2020-08-08
  • Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式

    這篇文章主要介紹了Shiro:自定義Realm實(shí)現(xiàn)權(quán)限管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java如何通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令

    Java如何通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令

    這篇文章主要介紹了Java如何通過(guò)ssh遠(yuǎn)程連接主機(jī)并執(zhí)行命令問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

岳阳市| 同仁县| 丹阳市| 舟曲县| 贡觉县| 内乡县| 和龙市| 务川| 报价| 都匀市| 南阳市| 西华县| 贵德县| 新昌县| 昭平县| 佛教| 岳西县| 裕民县| 奈曼旗| 株洲县| 塔河县| 永兴县| 临泽县| 淮南市| 玉树县| 固原市| 都兰县| 泸定县| 天柱县| 赤壁市| 徐闻县| 双牌县| 济南市| 海门市| 基隆市| 呈贡县| 武威市| 怀集县| 庐江县| 横山县| 八宿县|