Java 基本類型與包裝類詳解

Java 基本類型與包裝類詳解

在 Java 開發中,理解 基本數據類型與包裝類、字符串處理、以及高精度計算類是非常核心的能力。這不僅關系到程序性能,還影響代碼的正確性和可維護性。本文將詳細講解這些知識點,并給出常見的使用技巧和陷阱。


1?? 基本數據類型與引用類型的區別

Java 中有兩種數據類型:

類型示例存儲方式特點
基本數據類型int、long、double、boolean、char存儲實際值,效率高,占用空間小
引用數據類型Integer、String、數組、對象存儲對象地址,支持方法調用,可為 null

注意點

  • 基本類型默認值有固定值(如 int=0, boolean=false)
  • 引用類型默認值是 null
  • 基本類型操作速度快,引用類型功能豐富

2?? 包裝類

Java 為每個基本類型提供了對應的包裝類:

基本類型包裝類
intInteger
longLong
doubleDouble
booleanBoolean
charCharacter

作用

  • 可以作為對象使用(如集合中存儲)
  • 提供一些工具方法(如 Integer.parseInt()、Double.valueOf())

示例:

int a = 10;
Integer b = Integer.valueOf(a); // 基本數據類型-->包裝類 裝箱
int c = b.intValue();           // 包裝類-->基本數據類型 拆箱

3?? 自動裝箱 / 拆箱

從 Java 5 開始,Java 支持 自動裝箱自動拆箱

Integer x = 100;  // 自動裝箱,相當于 Integer.valueOf(100)
int y = x;        // 自動拆箱,相當于 x.intValue()

注意點

  • 裝箱/拆箱涉及對象創建和方法調用,過度使用可能影響性能
  • == 比較包裝類時要注意:小整數緩存(-128~127)可能導致 == 為 true,大整數則可能為 false
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false

4?? String 與 StringBuilder / StringBuffer

4.1 不可變 vs 可變

  • String:不可變,每次修改都會生成新對象
  • StringBuilder / StringBuffer:可變,適合大量字符串拼接
  • 線程安全
    • StringBuilder:非線程安全
    • StringBuffer:線程安全(同步方法)

示例:

String str = "Hello";
str += " World"; // 每次拼接都會生成新對象StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 原對象修改,不生成新對象

5?? Math 類常用方法

java.lang.Math 提供大量常用數學方法:

Math.abs(-10);       // 絕對值
Math.max(3, 7);      // 最大值
Math.min(3, 7);      // 最小值
Math.pow(2, 3);      // 冪
Math.sqrt(16);       // 平方根
Math.round(3.6);     // 四舍五入
Math.random();       // 生成 0~1 隨機數

6?? BigInteger / BigDecimal(高精度計算)

6.1 BigInteger

  • 支持任意精度整數運算
  • 常用于大數計算或加密算法
BigInteger big1 = new BigInteger("12345678901234567890");
BigInteger big2 = new BigInteger("98765432109876543210");
BigInteger sum = big1.add(big2);
System.out.println(sum);

6.2 BigDecimal

  • 支持高精度浮點數運算
  • 避免 double 浮點誤差
double a = 0.1 + 0.2;
System.out.println(a); // 0.30000000000000004BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
BigDecimal bSum = b1.add(b2);
System.out.println(bSum); // 0.3

注意點

  • 構造 BigDecimal 時盡量使用 String 構造,而不是 double
  • double 構造可能引入浮點誤差

7?? 總結

本文主要講解了 Java 基本類型與包裝類String 與 StringBuilder/StringBufferMath 類方法以及 高精度計算類 BigInteger/BigDecimal 的核心知識:

  • 基本類型性能高,包裝類功能豐富
  • 自動裝箱拆箱要注意性能和 == 問題
  • 字符串拼接推薦使用 StringBuilder
  • BigDecimal 是處理浮點數精度問題的利器

掌握這些基礎 API,是寫出 健壯、高性能 Java 程序的前提

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94754.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CRYPT32!CryptMsgUpdate函數分析之CRYPT32!PkiAsn1Decode函數的作用是得到pci

第一部分: CryptMsgUpdate( #endifIN HCRYPTMSG hCryptMsg,IN const BYTE *pbData,IN DWORD cbData,IN BOOL fFinal) {ContentInfo *pci NULL;if ((PHASE_FIRST_FINAL pcmi->dwPhase) &&(0 pcmi->dwMsgType)) {if (0 …

華為交換機S5700設置acl

1.、配置ACL1.1、定義允許的ACL規則[sw1]acl number 3001[sw1-acl-adv-3001]rule permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0[sw1-acl-adv-3001]rule permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 01.2、定義禁止的ACL規則[sw…

在使用spring ai進行llm處理的rag的時候,選擇milvus還是neo4j呢?

在使用spring ai進行llm處理的rag的時候,選擇milvus還是neo4j呢? 對于Spring AI中的RAG(Retrieval-Augmented Generation)應用,選擇Milvus還是Neo4j,主要取決于你的數據類型以及RAG流程中對數據檢索的側重點…

計算機視覺與深度學習 | 視覺里程計技術全景解析:從原理到前沿應用

視覺里程計技術全景解析:從原理到前沿應用 一、定義與核心價值 二、技術原理與分類體系 2.1 基本工作流程 2.2 主流技術路線對比 2.3 算法范式演進 三、典型應用場景 3.1 地面移動機器人 3.2 自動駕駛領域 3.3 深空探測 3.4 增強現實 四、核心技術挑戰與突破路徑 4.1 主要技術…

Wireshark和USRP捕獲同一信號波形差異原因

一、波形差異 在前面的博客中我對比繪制了同一信號的Wireshark和USRP兩種波形: 可以看出波形差別還是挺大的,尤其是在信號分布間隔方面。 我猜想Wireshark的一條數據包在物理上并不是連續的: 而是分組發送,但在Wireshark中合并在…

Python-GEE遙感云大數據分析、可視化與Satellite Embedding應用

隨著航空、航天、近地空間遙感平臺的持續發展,遙感技術近年來取得顯著進步。遙感數據的空間、時間、光譜分辨率及數據量均大幅提升,呈現出大數據特征。2025年7月,Google DeepMind發布了革命性的AlphaEarth Foundations模型及Satellite Embedd…

Python常見設計模式2: 結構型模式

文章目錄適配器模式橋接模式組合模式外觀模式代理模式適配器模式 將一個類的接口轉換成客戶希望的另一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。兩種實現方式: 類適配器:使用多繼承對象適配器:使用組合…

HDMI2.1 8K驗證平臺

本文推薦其中一個平臺ZCU106HDMI2.1 FMC Card 一、ZCU106主要特性與優勢 經過優化,可采用 Zynq Ultrascale MPSoC 快速進行應用原型設計集成型視頻編解碼器單元支持 H.264/H.265HDMI 視頻輸入輸出PCIe 端點 Gen3x4、USB3、DisplayPort 和 SATADDR4 SODIMM – 64 位…

R語言使用隨機森林對數據進行插補

數據插補的目的是為了恢復數據的完整性,以便后續的數據分析和挖掘工作能夠順利進行。插補方法的選擇取決于數據的特點和缺失模式。常見的插補方法包括均值插補、回歸插補、多重插補等。均值插補簡單易行,但可能會改變數據分布;回歸插補考慮了…

論文閱讀:ICLR 2024 GAIA: A Benchmark for General AI Assistants

https://arxiv.org/pdf/2311.12983 https://www.doubao.com/chat/18484357054754562 GAIA: A Benchmark for General AI Assistants GAIA:通用人工智能助手基準測試 該論文介紹了GAIA(General AI Assistants)基準測試,這是一…

【Cmake】靜態庫(編譯-鏈接-引用)相關函數

目錄 一.file 1.1.示例一 1.2.示例二 1.2.1.GLOB 1.2.2.GLOB_RECURSE 1.3.示例三 1.3.1.GLOB 1.3.2.GLOB_RECURSE 1.4.file(GLOB)的缺點 二.add_library 示例 1:創建一個簡單的靜態庫 示例 2:創建一個簡單的共享庫(動態庫&#x…

【50頁PPT】鋼鐵企業數字化工廠解決方案需求要點(附下載方式)

篇幅所限,本文只提供部分資料內容,完整資料請看下面鏈接 https://download.csdn.net/download/2501_92796370/91716817 資料解讀:鋼鐵企業數字化工廠解決方案需求要點 詳細資料請看本解讀文章的最后內容 鋼鐵行業數字化轉型背景與意義 當…

Java深拷貝與淺拷貝核心解析

Java深拷貝與淺拷貝的概念淺拷貝(Shallow Copy)只復制對象的引用,而不復制對象本身。拷貝后的對象和原對象共享同一塊內存地址中的子對象。修改其中一個對象的非基本類型屬性時,另一個對象的對應屬性也會被修改。深拷貝&#xff0…

DBeaver 的 PostgreSQL 驅動包默認存儲位置

在 Windows 系統中,DBeaver 的 PostgreSQL 驅動包(JDBC 驅動 JAR 文件)默認存儲位置如下: ###🔍 默認驅動安裝路徑 C:\Users\你的用戶名\AppData\Roaming\DBeaverData\drivers說明:你的用戶名:…

大數據畢業設計選題推薦:基于北京市醫保藥品數據分析系統,Hadoop+Spark技術詳解

🍊作者:計算機畢設匠心工作室 🍊簡介:畢業后就一直專業從事計算機軟件程序開發,至今也有8年工作經驗。擅長Java、Python、微信小程序、安卓、大數據、PHP、.NET|C#、Golang等。 擅長:按照需求定制化開發項目…

Package.xml的字段說明

package.xml 的版本說明 <package format"2"></package>每一個 package.xml 都以作為 root 標簽&#xff0c;其中 format 代表版本,現在主要是版本 2 為主,與版本 1 之間的差別主要是一些子標簽, package.xml 的必備標簽 name:功能包名 version:版本號。…

JAVA【抽象類】和【接口】

在面向對象編程中&#xff0c;接口&#xff08;Interface&#xff09;和抽象類&#xff08;Abstract Class&#xff09;都是用于實現抽象化的機制&#xff0c;但它們在設計目的、語法規則和使用場景上有顯著區別。以下是它們的核心區別&#xff1a; 1. 定義與關鍵字接口&#x…

Mysql系列--11、使用c/c++訪問mysql服務

目錄 一、準備 測試 二、創建對象 三、連接Mysql服務 四、下達指令 3.1增刪改 增加 編碼格式 刪除 修改 3.2查詢結果 結構體理解 打印屬性 打印數據 前面我們已經學習并練習了本地命令行形式的sql語句的使用&#xff0c;可在以后開發中我們一般 不會直接命令行操作數據庫&…

CS144 lab3 tcp_sender

0. 前言 這個實驗做了挺久的&#xff0c;剛開始做的時候官方的代碼庫還是開著的。 調著調著代碼官方把倉庫給刪掉了&#xff0c;又去找別人的代碼倉庫調發現不 對都打算放棄了&#xff0c;過了幾天發現了一個start-code的庫 再合進去簡直完美。這個實驗花的時間應該是前四個里面…

華為HCIP數通學習與認證解析!

大家好&#xff0c;這里是G-LAB IT實驗室。在信息技術飛速發展的今天&#xff0c;隨著華為產品和服務的廣泛應用&#xff0c;成為一名華為數通工程師無疑是許多年輕從業者的目標。然而&#xff0c;對于許多人來說&#xff0c;面對令人眼花繚亂的華為認證體系&#xff0c;不禁要…