国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
前言
類別載入機制:
物件實例化過程:
首頁 Java java教程 Java中Boolean和boolean的差別是什麼

Java中Boolean和boolean的差別是什麼

May 05, 2023 pm 07:40 PM
java boolean

前言

有人問,Boolean 類型的值不是只有 true 和 false 兩種嗎?為什麼他定義的屬性出現(xiàn)了 null 值?

我們應該先明確一點,boolean 是 Java 的基本資料型別,Boolean 是 Java 的一個類別。 boolean 類型會在「賦零值」階段賦予屬性 false。而 Boolean 是一個類,會在「賦零值」階段為物件賦 null。

如果是靜態(tài)屬性,會在類別載入時被賦值。如果是普通類別屬性,會在實例化物件時賦值。這兩點可以了解一下「類別載入機制」和「物件建立過程」。

類別載入機制:

  • 載入:根據(jù)類別的全名獲取類別的二進位位元組流,將類別載入記憶體並在堆中產(chǎn)生一個代表這個類別的Class 對象,作為方法區(qū)資料的存取入口

  • 驗證:驗證class 檔案中的位元組流是否符合JVM 規(guī)範

  • 準備:在方法區(qū)中為類別的靜態(tài)屬性分配內(nèi)存,並初始化預設值(boolean 的預設值是false,Boolean 的預設值是null)

  • 解析:將常數(shù)池中的符號引用轉換為直接引用,可以理解為物件引用轉成指標

  • 初始化:真正開始執(zhí)行類別中的程式碼,靜態(tài)屬性賦值與靜態(tài)區(qū)塊

物件實例化過程:

  • 檢查類別是否已經(jīng)載入(雙親委派)

  • 給物件分配內(nèi)存空間(指標碰撞)

  • 零值初始化(false / null)

  • 設定物件頭(物件分代年齡等資訊)

  • 執(zhí)行 方法(屬性初始化,語句區(qū)塊和建構方法)

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

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

// final boolean類型的屬性,通過構造方法注入值
private final boolean value;

// 構造方法 Boolean a = true 實際上就是調(diào)用這個方法
public Boolean(boolean value) {
    this.value = value;
}

// 構造方法
public Boolean(String s) {
    this(parseBoolean(s));
}

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

關於Boolean 使用過程中有一個風險點,阿里巴巴開發(fā)手冊也寫得非常好

Java中Boolean和boolean的差別是什麼

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

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

之後就會被打。

補充:Boolean與boolean性能探究

針對Boolean與true

單純從源碼角度看不出來那個性能上更加好;大布爾也是初始化了兩個static物件

原始碼截圖如下:

Java中Boolean和boolean的差別是什麼

#寫了一個測試類別:測試方式(取得大布林類型true的時間取得小布林類型true的時間,透過100、1000、10000、100000次看看那個時間更少的次數(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次的比較結果---->"+get());
	}
}
執(zhí)行結果如下圖:

Java中Boolean和boolean的差別是什麼

以上是Java中Boolean和boolean的差別是什麼的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常並關閉連接,避免連接洩漏;此外建議使用連接池、設置保存點實現(xiàn)部分回滾,並保持事務盡可能短以提升性能。

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡端口和防火牆 了解網(wǎng)絡端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存洩漏風險。 1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對像被標記為垃圾。 2.基於標記-清除算法,標記所有可達對象,清除未標記對象。 3.採用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應用;ParallelGC提升吞吐量;CMS降

使用HTML'輸入類型”作為用戶數(shù)據(jù) 使用HTML'輸入類型”作為用戶數(shù)據(jù) Aug 03, 2025 am 11:07 AM

選擇合適的HTMLinput類型能提升數(shù)據(jù)準確性、增強用戶體驗並提高可用性。 1.根據(jù)數(shù)據(jù)類型選用對應input類型,如text、email、tel、number和date,可實現(xiàn)自動校驗和適配鍵盤;2.利用HTML5新增類型如url、color、range和search,可提供更直觀的交互方式;3.配合使用placeholder和required屬性,可提升表單填寫效率和正確率,但需注意placeholder不能替代label。

以身作則http中間件記錄示例 以身作則http中間件記錄示例 Aug 03, 2025 am 11:35 AM

Go中的HTTP日誌中間件可記錄請求方法、路徑、客戶端IP和耗時,1.使用http.HandlerFunc包裝處理器,2.在調(diào)用next.ServeHTTP前後記錄開始時間和結束時間,3.通過r.RemoteAddr和X-Forwarded-For頭獲取真實客戶端IP,4.利用log.Printf輸出請求日誌,5.將中間件應用於ServeMux實現(xiàn)全局日誌記錄,完整示例代碼已驗證可運行,適用於中小型項目起步,擴展建議包括捕獲狀態(tài)碼、支持JSON日誌和請求ID追蹤。

比較Java構建工具:Maven vs. Gradle 比較Java構建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

See all articles