Java面试高频总结:基本数据类型深度解析

📊 八种基本数据类型详解

数据类型关键字字节数位数默认值取值范围核心特性
字节型byte180-128 ~ 127最小整数类型
短整型short2160-32,768 ~ 32,767较少使用
整型int4320-2³¹ ~ 2³¹-1 (约±21亿)最常用整数类型
长整型long8640L-2⁶³ ~ 2⁶³-1大范围整数
单精度float4320.0f±3.4e-38 ~ ±3.4e38需后缀f/F
双精度double8640.0d±1.7e-308 ~ ±1.7e308默认浮点类型
字符型char216‘\u0000’0 ~ 65,535 (Unicode字符)存储单个字符
布尔型boolean-1falsetrue/false条件判断专用

💡 关键记忆点

  • intlong的区别不仅是范围大小,更在内存占用处理效率
  • 浮点类型默认是double,声明float必须显式添加f后缀
  • boolean大小未精确定义,JVM实现通常使用1字节

🔄 数据类型转换与运算

类型转换三要素

  1. 隐式转换(自动提升)

    • 小范围类型→大范围类型自动转换
    • 方向:byte → short → int → long → float → double
    • charint自动转换(获取Unicode值)
  2. 显式转换(强制类型转换)

    • 语法:(目标类型)变量名
    • 风险:精度丢失(浮点→整数)或数据溢出(大整数→小整数)
    • 示例:double d = 3.14; int i = (int)d; // i=3
  3. 字符串转换桥梁

    • 基本类型→String:String.valueOf()"" + 基本类型
    • String→基本类型:Integer.parseInt()等包装类方法

⚠️ long与int互转注意事项

转换方向方式风险等级推荐做法
int → long隐式自动★☆☆☆☆直接赋值即可
long → int强制显式★★★★☆必须检查范围:if(longVal >= Integer.MIN_VALUE && longVal <= Integer.MAX_VALUE)

💰 BigDecimal vs double:金融计算的生死抉择

为什么double不适合金融计算?

// 典型精度丢失案例
System.out.println(0.1 + 0.2); 
// 输出:0.30000000000000004 (而非0.3)

BigDecimal核心优势

维度doubleBigDecimal
精度15-17位有效数字任意精度
计算原理二进制浮点近似值十进制精确计算
舍入控制基本四舍五入8种舍入模式
适用场景科学计算、3D图形财务系统、货币
性能慢(约10-100倍)

🔥 黄金法则:凡是涉及货币金额税率计算利息结算等场景,必须使用BigDecimal!


📦 装箱与拆箱机制揭秘

核心概念

装箱
拆箱
基本类型 int
包装类 Integer

自动装箱/拆箱原理

  • 装箱Integer i = 100; → 编译为Integer.valueOf(100)
  • 拆箱int j = i; → 编译为i.intValue()

使用陷阱

Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d = 200;System.out.println(a == b); // true(缓存范围-128~127)
System.out.println(c == d); // false(超出缓存,新建对象)

⚔ int vs Integer:原始与包装的博弈

存在意义对比

维度int(基本类型)Integer(包装类)
内存占用4字节16字节(对象头+字段)
存储位置栈内存堆内存
功能扩展仅数值运算提供类型转换、解析等方法
集合兼容不可直接使用可直接存入集合
泛型支持不可用于泛型可用于泛型
空值表示无(0有歧义)可用null表示缺失值

使用场景决策树

graph TD
A[需要存储数据] --> B{是否使用集合/泛型?}
B -->|是| C[使用Integer]
B -->|否| D{是否高频计算?}
D -->|是| E[使用int]
D -->|否| F{需要空值语义?}
F -->|是| C
F -->|否| E

🎯 Integer缓存机制深度解析

缓存范围与原理

  • 默认范围:-128 ~ 127(可通过JVM参数-XX:AutoBoxCacheMax=<size>扩展上限)
  • 实现原理Integer.valueOf()优先返回缓存对象
  • 源码关键
    public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
    }
    

缓存机制影响

场景结果原因分析
Integer a = 127;
Integer b = 127;
a == b命中缓存,同一对象
Integer c = 128;
Integer d = 128;
c != d超出范围,新建不同对象
Integer e = new Integer(100);
Integer f = new Integer(100);
e != f强制新建对象

⚠️ 重要建议:Integer比较始终使用equals()而非==


💎 核心知识总结

  1. 基本类型选择铁律

    • 整数默认用int,超20亿用long
    • 浮点默认用double,精确计算用BigDecimal
  2. 类型转换三原则

    • 小转大自动,大转小强制
    • 浮点转整数截断小数
    • 字符串转换注意格式异常
  3. 包装类使用精髓

    • 集合存储必须用包装类
    • 高频计算场景用基本类型
    • 对象比较用equals()
  4. Integer缓存陷阱

    • 默认缓存-128~127
    • 值比较用equals()
    • 避免用new Integer()创建对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93535.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93535.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93535.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防世界—unseping(反序列化)

一.审题<?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_u…

AI热点周报(8.10~8.16):AI界“冰火两重天“,GPT-5陷入热议,DeepSeek R2模型训练受阻?

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录3分钟速览版&#xff1a;一张表看懂本周AI大事一、GPT-5&#xff1a;期待越高&#x…

Python_vue3_django旅拍在线婚纱摄影网站的设计与实现016023190_源码LW_讲解安装

目录前言-本系统介绍已开发项目效果实现截图开发技术详细介绍论文设计框架系统测试核心代码参考示例总结源码获取详细视频演示或者查看其他版本&#xff1a;文章底部获取博主联系方式&#xff01;前言-本系统介绍 利用Python语言、MySQL数据库&#xff0c;Django框架&#xff0…

Python爬虫-爬取政务网站的文档正文内容和附件数据

前言 本文是该专栏的第67篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以某政务网站为例子。基于Python爬虫采集某政务网站的文档正文内容和其关联的附件数据。 具体的实现思路以及完整实现代码逻辑,笔者将在正文进行详细介绍。废话不多说,跟着笔者直接往下…

Python:如何在Pycharm中显示geemap地图?

01 说明 或许在旧版本的python和jupyter中并不能成功. 作为参考&#xff0c;这里给出实验成功的版本&#xff1a;名称版本通道geemap0.36.1conda-forgejupyter1.1.1conda-forgepycharm2024.1.4 (Professional Edition)nullpython3.11.13conda-forge此外&#xff0c;由于显示底图…

力扣3:无重复字符的最长子串

力扣3:无重复字符的最长子串题目思路代码题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 思路 这道题的思路其实是很简单的&#xff0c;最后我们需要得到子串的长度所以我们可以定义两个变量即子串的左边界和右边界这样有了左右边界就…

Git登录配置的详细方法

Git登录绑定主要涉及配置用户信息和设置身份验证。以下是详细的配置方法&#xff1a; 1. 配置基本用户信息 # 全局配置用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email "你的邮箱example.com"# 或者为单个仓库配…

测试工程师的AI转型指南:从工具使用到测试策略重构

测试工程师的AI转型指南&#xff1a;从工具使用到测试策略重构 测试工程师正站在职业转型的十字路口。当GitHub Copilot能自动生成测试用例&#xff0c;AI性能工具能预测系统瓶颈&#xff0c;传统“手动执行用例、人工分析结果”的工作模式正被颠覆。某互联网公司测试团队的调研…

3D打印——给开发板做外壳

3D打印——给开发板做外壳前言一、建立开发板3D模型根据开发板尺寸绘制草图绘制PCB草图&#xff08;手动&#xff09;绘制PCB草图&#xff08;导入&#xff09;拉伸PCB板下载零件3D模型装配零件二、建立外壳3D模型盒子盖子&#xff08;卡扣&#xff09;最终效果三、问题记录前言…

Spring AI架构分析

Spring AISpring AI开发框架提供对接应用与AI模型的集成开发能力&#xff0c;让开发者更加容易地开发智能体以及其他生成式人工智能的应用&#xff1a;模型&#xff08;Model&#xff09;AI模型是算法与数据的集合&#xff0c;用于处理信息以及生成信息&#xff0c;主要AI模型的…

Javar如何用RabbitMQ订单超时处理

RabbitMQ 订单超时处理方案 使用 RabbitMQ 的 TTL 死信队列&#xff08;DLX&#xff09; RabbitMQ 的 TTL&#xff08;Time-To-Live&#xff09; 和 死信队列&#xff08;Dead Letter Exchange&#xff09; 是处理订单超时的常见方案。核心思路是设置消息的过期时间&#xff0…

记录一下 StarRocks 点查的 Profile Metrics

背景 Starrocks 3.5 补充两个点查的 profile 一个是没有开启点查的情况&#xff0c;也就是SET enable_short_circuit false; 一个是开启点查的情况&#xff0c;也就是SET enable_short_circuit true; 其中建表语句如下&#xff1a; CREATE TABLE ac_account (id bigint(20) …

react echarts图表监听窗口变化window.addEventListener(‘resize’)与ResizeObserver()

发生问题场景 系统页面使用tabs标签页,当有多个组件&#xff0c;有使用eCharts图表的页面时&#xff0c;其中的一个页面或其他页面使用了F11的页面全屏&#xff0c;关闭全屏后图表会收缩起来(注:固定eCharts的width、height 的参数值是无影响&#xff0c;按照固定参数大小展示)…

Leaflet赋能:WebGIS视角下的省域区县天气可视化实战攻略

目录 前言 一、空间数据基础 1、省域空间检索 2、区县天气信息检索 二、天气数据简介 1、省域天气数据获取 2、区县名称不一致 三、SpringBoot后台实现 1、Java后台天气数据查询 2、控制层实现 四、WebGIS前端实现 1、气温颜色及图例初始化 2、气温数据展示实现 五…

《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》论文精读笔记

前言 论文链接&#xff1a;[2401.10935] SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents SeeClick是一种只依赖截图就能执行自动化任务的方法。 在这篇论文中&#xff0c;还提出了ScreenSpot数据集&#xff0c;涵盖移动端、桌面和Web环境的真实benchma…

校园综合数据分析可视化大屏 -Vue纯前端静态页面项目

最近一直在学习用vue来制作 一些 大屏报表的网站&#xff0c;今天就来分享一个我最近做的一个 关于校园综合数据分析可视化大屏的网站。 使用的技术是vue2 element-uiVue2&#xff1a;Element-UI&#xff1a;ECharts&#xff1a;Node版本 16.20 安装依赖&#xff1a;n…

【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决用一段时间就提示升级的问题

烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决提示升级的问题本固件可用于那些adb打不开或无法用U盘成功刷机的盒子&#xff1b;本固件需要准备一个TTL线哦&#xff1b;CH340型号的 可以网上自购&#xff1b;TTL链接点 参考下图&#xff1a;其他也没有特别需要说明了的&#…

大模型应用发展与Agent前沿技术趋势(中)

大模型与Agent结合的深度技术架构 分层式Agent架构设计 随着大模型规模的不断增长&#xff0c;传统的Agent实现方式已难以满足高性能、高可扩展性的需求。现代大模型Agent系统通常采用分层式架构设计&#xff0c;将复杂的决策过程分解为多个功能模块&#xff0c;每个模块负责特…

Python可视化工具-Bokeh:动态显示数据

目录 概述 1 认识Bokeh 1.1 Bokeh介绍 1.2 安装Bokeh 1.3 范例介绍 2 Bokeh的应用 2.1 Bokeh应用的框架结构 2.2 实时性数据核心原理 3 具体案例 3.1 代码实现 3.2 部署和运行 概述 Bokeh是一个用于创建交互式可视化的Python库&#xff0c;特别适合在Web浏览器中展示…

Elasticsearch「kNN Retriever」把向量检索装进一条 \_search 管线

1. kNN retriever 是什么&#xff1f; kNN retriever 是 Retriever 框架中的首阶段召回器&#xff0c;负责对一个向量字段做近邻搜索&#xff0c;返回 Top-K 文档。相比早期的 knn 顶级语法&#xff0c;Retriever 让我们能在一个请求里组合多种策略&#xff08;如 RRF/Rescorer…