Java进阶——数据类型深入解析
Java数据类型深入解析
本文主要介绍 Java 数据类型的相关知识,包括8 种基本类型、默认值、字面量表示、自动装箱与拆箱、类型转换规则(隐式转换、强制转换)、浮点型精度问题、字符与字符串、引用类型比较与常量池、数值溢出与处理、类型推断等等。
本文目录
- 基本数据类型分类与特性
- 自动装箱与拆箱
- 类型转换规则
- 浮点型精度问题
- 字符与字符串
- 数组特性
- 引用类型比较与常量池
- 数值溢出与处理
- 类型推断(Java 10+)
- 其他注意事项
- 业务场景下的最佳实践
基本数据类型分类与特性
- 8种基本类型:
- 整型:
byte(8位)、short(16位)、int(32位,默认)、long(64位,需加L后缀)。 - 浮点型:
float(32位,需加F后缀)、double(64位,默认)。 - 字符型:
char(16位Unicode,单引号)。 - 布尔型:
boolean(仅true/false,不可与整数互换)。
- 整型:
- 默认值:整型/浮点型默认
0,布尔型默认false,引用类型默认null。 - 字面量表示:
long num = 100L;
float f = 3.14F;
未加后缀的浮点默认为double。
自动装箱与拆箱
- 包装类缓存机制:
Integer、Byte等包装类缓存-128~127的值,Integer.valueOf(127) == Integer.valueOf(127)为true,但new Integer(127)会创建新对象。- 比较陷阱:包装类对象需用
equals()而非==比较值。
Integer a = 127; // 使用缓存对象
Integer b = 127;
System.out.println(a == b); // true(-128~127范围内)Integer x = 200;
Integer y = 200;
System.out.println(x.equals(y)); // true
- 性能影响:频繁装箱拆箱(如循环内)会导致额外对象创建,影响性能。
类型转换规则
- 隐式转换(自动提升):
- 小类型转大类型自动提升(如
byte→int)。 - 表达式运算中,
byte/short提升为int,float与double混合提升为double。
- 小类型转大类型自动提升(如
- 强制转换:
- 大类型转小类型需显式转换,可能丢失精度(如
double→int截断小数)。 - 示例:
- 大类型转小类型需显式转换,可能丢失精度(如
byte b = (byte) (a + 1); // a为byte时仍需强制转换
浮点型精度问题
- 避免精确计算:
float/double不适合金融计算(如0.1无法精确表示),应使用BigDecimal。
double price1 = 0.1;
double price2 = 0.2;
System.out.println(price1 + price2); // 输出0.30000000000000004(精度问题!)BigDecimal total = new BigDecimal("0.1").add(new BigDecimal("0.2"));
System.out.println(total); // 0.3
字符与字符串
- 字符串不可变性:
String修改会创建新对象,频繁拼接用StringBuilder。
// 低效方式:频繁创建新对象
String orderId = "ORDER";
for (int i = 0; i < 1000; i++) {orderId += "-" + i; // 每次循环生成新String对象
}// 高效方式:使用StringBuilder
StringBuilder builder = new StringBuilder("ORDER");
for (int i = 0; i < 1000; i++) {builder.append("-").append(i);
}
String finalOrderId = builder.toString();
- 字符串常量池:
String s1 = "abc";(常量池)与String s2 = new String("abc");(堆)不同对象。intern()方法可将字符串加入常量池。
String s1 = new String("ABC").intern();
String s2 = "ABC";
System.out.println(s1 == s2); // true
数组特性
- 固定长度与默认值:
- 数组长度不可变,动态扩容需用
ArrayList。 - 元素默认值:整型为
0,布尔型为false,引用类型为null。
- 数组长度不可变,动态扩容需用
// 固定长度数组的局限性
Product[] products = new Product[10];
products[0] = new Product();// 动态扩容推荐使用ArrayList
List<Product> productList = new ArrayList<>();
productList.add(new Product()); // 自动扩容int[] counts = new int[5];
System.out.println(counts[0]); // 0(基本类型默认值)
Product[] products2 = new Product[5];
System.out.println(products2[0]); // null(引用类型默认值)
引用类型比较与常量池
==与equals():==比较引用地址,equals()比较值。
数值溢出与处理
- 溢出风险:
- 整型运算超出范围会循环(如
Integer.MAX_VALUE + 1 → Integer.MIN_VALUE)。 - 大数值用
BigInteger或long。
- 整型运算超出范围会循环(如
long bigNumber = 3000000000L; // 超出int范围时必须加L后缀
类型推断(Java 10+)
var关键字:- 仅限局部变量,需初始化(如
var list = new ArrayList<String>();)。 - 不可用于方法参数或返回值。
- 仅限局部变量,需初始化(如
其他注意事项
- 枚举类型:
enum是引用类型,用于定义固定常量集合。
public enum OrderStatus {PENDING, PAID, SHIPPED, DELIVERED, CANCELLED
}// 使用示例
OrderStatus status = OrderStatus.PAID;
if (status == OrderStatus.PAID) {System.out.println("订单已支付!");
}
- 转义字符:如
\n(换行)、\t(制表符)、\\(反斜杠)。
业务场景下的最佳实践
- 金额计算:无条件使用
BigDecimal,避免double精度问题。 - 高频数值操作:优先使用基本类型(如
int),减少自动装箱开销。 - 字符串拼接:使用
StringBuilder或StringBuffer(线程安全)。 - 状态管理:利用
enum替代魔法数字,提升代码可读性。 - 数据校验:用户输入转换时务必捕获
NumberFormatException。
// 用户输入的字符串转整型
String input = "10";
try {int quantity = Integer.parseInt(input); // 可能抛出NumberFormatException
} catch (NumberFormatException e) {System.out.println("输入非数字!");
}
| ← 上一篇 Java进阶——Stream流以及常用方法详解 | 记得点赞、关注、收藏哦! | 下一篇 Java进阶——注解一文全懂 → |
相关文章:
Java进阶——数据类型深入解析
Java数据类型深入解析 本文主要介绍 Java 数据类型的相关知识,包括8 种基本类型、默认值、字面量表示、自动装箱与拆箱、类型转换规则(隐式转换、强制转换)、浮点型精度问题、字符与字符串、引用类型比较与常量池、数值溢出与处理、类型推断等…...
R语言+AI提示词:贝叶斯广义线性混合效应模型GLMM生物学Meta分析
全文链接:https://tecdat.cn/?p40797 本文旨在帮助0基础或只有简单编程基础的研究学者,通过 AI 的提示词工程,使用 R 语言完成元分析,包括数据处理、模型构建、评估以及结果解读等步骤(点击文末“阅读原文”获取完整代…...
深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准20250228
深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准 在当今数字化金融时代,信息安全至关重要,而密钥管理则是保障金融数据安全的核心环节。ANSI X9.31 TR-31作为金融行业密钥管理的关键标准,为对称密钥的全生命周期管理提供了坚…...
视频字幕识别和翻译
下载的视频很多不是汉语的,我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费,但是低版本还是没有问题。 如果想要非汉语字幕转成中文,剪映低版本不提供这样功能。但是,用剪映导出识别字幕&am…...
Spring Boot 流式响应豆包大模型对话能力
当Spring Boot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式 一、前言:关于流式响应的奇妙比喻 想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴…...
算法之领域算法
领域算法 ♥一些领域算法知识体系♥ | Java 全栈知识体系...
【愚公系列】《Python网络爬虫从入门到精通》033-DataFrame的数据排序
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
软件安全性测试类型分享,第三方软件测试机构如何进行安全性测试?
在数字化时代,软件的安全性至关重要,因此软件产品安全性测试必不可少。软件安全性测试是指针对软件系统的漏洞、弱点及其他安全隐患进行评估和检测的过程。它旨在发现潜在的安全问题,以保护软件和用户的利益。通过系统化的测试,企…...
eMMC安全简介
1. 引言 术语“信息安全”涵盖多种不同的设计特性。一般而言, 信息安全是指通过实践防止信息遭受未经授权的访问、使用、披露、中断、篡改、检查、记录或销毁。 信息安全的三大核心目标为 机密性(Confidentiality)、完整性(Integr…...
在VSCode 中使用通义灵码最新版详细教程
在 VSCode 中使用通义灵码:最新版详细教程与使用场景 Visual Studio Code(简称 VSCode)是一款由微软开发的轻量级、功能强大的开源代码编辑器,支持多种编程语言,深受开发者喜爱。而通义灵码(TONGYI Lingma…...
Ubuntu20.04安装Isaac sim/ Isaac lab
2025年之后omniverse好像不能直接装Isaac sim了,要跳转到官网链接。 Isaac lab要在Isaac sim安装之后才能安装 Ubuntu20.04安装Isaac sim/ Isaac lab Isaac sim安装Isaac lab安装 Isaac sim安装 找到官网 Isaac sim官方文档 下载下来解压到本地文件夹,…...
Redis 持久化方式:RDB(Redis Database)和 AOF(Append Only File)
本部分内容是关于博主在学习 Redis 时关于持久化部分的记录,介绍了 RDB 和 AOF 两种持久化方式,详细介绍了持久化的原理、配置、使用方式、优缺点和使用场景。并对两种持久化方式做了对比。文章最后介绍了 Redis 持久化的意义并与其他常见的缓存技术做了…...
spring boot 连接FTP实现文件上传
spring boot 连接FTP实现文件上传 maven: <!--ftp--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency>接口示例: ApiO…...
怎么进行mysql的优化?
MySQL 的优化是一个系统性的工作,涉及多个层面,包括查询优化、索引优化、配置优化、架构优化等。以下是一些常见的 MySQL 优化方法: 查询优化 避免全表扫描:确保查询能够使用索引,避免 SELECT *,只选择需要…...
Octave3D 关卡设计插件
课程参考链接 这位大佬有在视频合集中有详细的讲解,个人体验过,感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…...
【论文笔记-TPAMI 2024】FreqFusion:用于密集图像预测的频率感知特征融合
Frequency-aware Feature Fusion for Dense Image Prediction 用于密集图像预测的频率感知特征融合 Abstract:密集图像预测任务要求具有强类别信息和高分辨率精确空间边界细节的特征。为了实现这一点,现代分层模型通常利用特征融合,直接添加…...
DeepBI成单关键词管理策略:提升转化与曝光,助力电商业绩双增长
在电商竞争愈发激烈的市场环境中,优化广告投放的关键词管理是提升产品转化率和曝光量的关键。特别是对于那些已经证明其转化能力的成单关键词,如何更好地管理和优化,成为了卖家们亟需解决的问题。DeepBI通过一套智能化的管理方案,…...
ai-3、机器学习之逻辑回归
机器学习之逻辑回归 1、分类问题2、逻辑回归2.1、二分类问题线性回归2.2、二分类问题逻辑回归 1、分类问题 分类问题常用的算法:逻辑回归 y0 :垃圾邮件 y1:正常邮件 准确来说是分类任务与线性回归任务的区别 2、逻辑回归 2.1、二分类问题线性回归 分类…...
在kubernetes集群中持续压测 SpringCloud 应用,pod 的 memory cache 持续增长问题
问题描述 在kubernetes集群中压测 SpringCloud 应用,持续压测, pod 的 memory cache 持续增长,导致 pod 最终挂了。上图看看效果吧~pod的资源配置 cpu: 1~2 core内存:1~3 G pod 数:1分析思路 1)pod 级的 Memory Cache ,显示的为当前 pod 的 linux 系统的 cache 内存的…...
金融赋能绍兴纺织 民生银行助力外贸中小微企业“走出去”
在浙江绍兴,纺织业作为一张熠熠生辉的产业名片,承载着深厚的历史底蕴与蓬勃的发展活力。这里依傍长三角经济圈,交通网络纵横交错,将原材料产地与广阔市场紧密相连;产业集群高度成熟,上下游产业链完备&#…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
