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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;不禁要…