当前位置: 首页 > ai >正文

【Java基础面试题】数据类型

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.xdnf.cn/news/17954.html

相关文章:

  • PAT乙级_1085 PAT单位排行_Python_AC解法_含疑难点
  • C语言(11)—— 数组(超绝详细总结)
  • C++基础——内存管理
  • QT基础入门
  • Tomcat Server 组件原理
  • 肖臻《区块链技术与应用》第23-26讲 - The DAO事件、BEC事件、反思和总结
  • select、poll 和 epoll
  • RK3568 NPU RKNN(二):RKNN-ToolKit2环境搭建
  • Java应届生求职八股(5)---并发编程篇
  • 【OpenGL】LearnOpenGL学习笔记10 - 平行光、点光源、聚光灯
  • ZCU国产化方案选型,哪家物料更齐全
  • 图像相似度算法汇总及Python实现
  • Linux内核内存管理深度解析
  • 自适应阈值二值化参数详解 ,计算机视觉,图片处理 邻域大小 调整常数(C=3)和可视化调节参数的应用程序
  • [Linux] Linux硬盘分区管理
  • 配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题
  • 数据库Microsoft Access、SQL Server和SQLite三者对比及数据库的选型建议
  • Win11和Win10共享打印机提示709用添加Windows凭据来解决的小方法
  • 【UHD】vivado 2021.1 编译
  • 接口自动化测试框架搭建
  • maven与maven-archetype-plugin版本匹配问题
  • 一周学会Matplotlib3 Python 数据可视化-绘制绘制甘特图
  • 跑实验记录
  • Python Day30 CSS 定位与弹性盒子详解
  • python---内置函数
  • 微服务之注册中心与ShardingSphere关于分库分表的那些事
  • 【手撕JAVA多线程】1.从设计初衷去看JAVA的线程操作
  • Camera相机人脸识别系列专题分析之十九:MTK ISP6S平台FDNode原生代码
  • 【自动化运维神器Ansible】Ansible比较操作符详解:从基础到实战应用
  • 笔试——Day40