Java基础系列:深入理解八大基本数据类型及避坑指南

news2025/3/9 21:48:05

目录

一、基本数据类型概述

八大类型速查表

二、各类型详解与常见陷阱

1. 整型家族(byte/short/int/long)

2. 浮点型(float/double)

3. 字符型(char)

4. 布尔型(boolean)

三、类型转换的明坑暗礁

1. 隐式转换规则(由低到高)

2. 显式强制转换风险

3. 运算时的类型提升

四、高频面试陷阱题解析

1.无限循环之谜

2.浮点精度丢失案发现场

3.自动装箱NPE隐患

五、最佳实践建议


一、基本数据类型概述

Java作为强类型语言,提供了八种基本数据类型(Primitive Types),构成了Java程序的基石。与引用类型不同,基本类型直接存储数据值,具有固定内存空间和默认值,在内存分配和访问效率方面具有优势。

八大类型速查表

数据类型位数默认值取值范围包装类
byte80-128~127Byte
short160-32768~32767Short
int320-2³¹~(2³¹-1)Integer
long640L-2⁶³~(2⁶³-1)Long
float320.0f±1.4E-45~±3.4E38Float
double640.0d±4.9E-324~±1.7E308Double
char16'\u0000'0~65535Character
boolean1falsetrue/falseBoolean

二、各类型详解与常见陷阱

1. 整型家族(byte/short/int/long)

典型用法:

byte fileSize = 120;        // 文件字节处理
short screenWidth = 1920;   // 屏幕分辨率
int population = 1400000000;// 常用整型
long universeAge = 13800000000L; // 必须加L后缀

避坑指南:

  • long类型赋值必须加Llong num = 12345678900; 会编译错误

  • 整数溢出陷阱

int max = Integer.MAX_VALUE;
System.out.println(max + 1); // 输出-2147483648(最小值)
  • byte/short运算自动提升

byte a = 100;
byte b = 50;
byte c = (byte)(a + b); // 必须显式强制转换

2. 浮点型(float/double)

内存优化示例:

float price = 9.99f;       // 7位有效数字
double pi = 3.1415926535; // 15位有效数字

精度陷阱:

  • 舍入误差问题

System.out.println(0.1 + 0.2); // 输出0.30000000000000004
  • 比较的正确方式

// 错误方式
if (a == b) {...} 

// 正确方式
if (Math.abs(a - b) < 1e-6) {...}

3. 字符型(char)

特殊用法:

char copyright = '\u00A9'; // Unicode表示
int ascii = 'A';           // 自动转换为65

常见误区:

  • char与String混淆:'A' vs "A"

  • 数值运算提升:

char c = 'A';
System.out.println(c + 1); // 输出66(int类型)

4. 布尔型(boolean)

严格类型限制:

boolean isActive = true;
// if(1) {...}  // 编译错误(区别于C语言)

三、类型转换的明坑暗礁

1. 隐式转换规则(由低到高)

byte → short → int → long → float → double

int a = 100;
double b = a; // 自动转换

2. 显式强制转换风险

double d = 123.456;
int i = (int)d;       // 截断小数(i=123)
int overflow = (int)8888888888L; // 数据溢出

3. 运算时的类型提升

byte a = 100;
byte b = 50;
int result = a * b;  // 自动提升为int计算

四、高频面试陷阱题解析

1.无限循环之谜

for(byte i=0; i<128; i++){
    System.out.println(i); // 死循环(i达到127后变-128)
}

2.浮点精度丢失案发现场

System.out.println(9999999999999999.0 - 9999999999999998.0); 
// 输出2.0(精度不足)

3.自动装箱NPE隐患

Integer num = null;
int value = num; // 运行时报NullPointerException

五、最佳实践建议

  1. 金融计算使用BigDecimal

  2. 循环计数器优先使用int

  3. 大整数考虑longBigInteger

  4. 类型转换时显式声明范围检查

  5. 警惕包装类的自动拆箱NPE

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贝塞尔曲线学习

1、一阶贝塞尔曲线 一阶贝塞尔曲线其实是一条直线——给定点 P0、P1&#xff0c;线性贝塞尔曲线就是一条两点之间的直线&#xff0c;公式如下&#xff1a; 一阶曲线很好理解, 就是根据t来线性插值。 void MainWindow::mousePressEvent(QMouseEvent *e) {list.append(e->pos…

机器学习(六)

一&#xff0c;决策树&#xff1a; 简介&#xff1a; 决策树是一种通过构建类似树状的结构&#xff08;颠倒的树&#xff09;&#xff0c;从根节点开始逐步对数据进行划分&#xff0c;最终在叶子节点做出预测结果的模型。 结构组成&#xff1a; 根节点&#xff1a;初始的数据集…

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…

嵌入式学习笔记-卡尔曼滤波,PID,MicroPython

文章目录 卡尔曼滤波卡尔曼滤波的核心思想卡尔曼滤波的数学模型1. 状态转移模型&#xff08;预测系统状态&#xff09;2. 观测模型&#xff08;预测测量值&#xff09; 卡尔曼滤波的五个关键步骤1. 预测状态2. 预测误差协方差3. 计算卡尔曼增益4. 更新状态5. 更新误差协方差 卡…

upload-labs文件上传

第一关 上传一个1.jpg的文件&#xff0c;在里面写好一句webshell 保留一个数据包&#xff0c;将其中截获的1.jpg改为1.php后重新发送 可以看到&#xff0c;已经成功上传 第二关 写一个webshell如图&#xff0c;为2.php 第二关在过滤tpye的属性&#xff0c;在上传2.php后使用b…

C++20 格式化库:强大的字符串格式化工具

文章目录 格式化语法常见用法1. 填充和对齐2. 数值格式化3. 进制格式化4. 自定义类型 示例代码注意事项 C20 的格式化库是一个强大的工具&#xff0c;用于处理字符串的格式化操作。它提供了类似于 Python 中 str.format() 的功能&#xff0c;但语法和用法更符合 C 的风格。以下…

[傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中

[傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中 将MathType公式编辑器内嵌到WPS工具栏中 下载好所需文件 我用夸克网盘分享了「mathtype安装教程超简单易上手.zip」&#xff0c;点击链接即可保存。打开「夸克APP」 链接&#xff1a;https://pan.quark.cn/s/4726c684…

分析TCP三次握手与四次挥手

TCP&#xff08;传输控制协议&#xff09;通过三次握手建立连接&#xff0c;四次挥手终止连接&#xff0c;确保数据传输的可靠性。 TCP的三个控制标志位&#xff1a; SYN——用于建立连接&#xff0c;同步序列号。 ACK——用于确认收到的数据。 FIN——用于终止连接。 ISN…

【深度学习】宠物品种分类Pet Breeds Classifier

文章目录 宠物品种数据集制作宠物品种标签图像预处理Presizing 损失函数loss观察模型的性能提升模型的性能learning rate finder使用CLR算法训练选择学习率的策略重新训练 迁移学习微调fine_tunefit_one_cycle有判别力的学习率 选择epoch的数量更深的网络架构 宠物品种数据集 …

【从零开始学习计算机科学】HLS算子调度

算子调度 调度是HLS 中的核心问题,为无时序或部分时序的输入指定时钟边界,其对最终结果质量具有很大的影响。调度会影响时钟频率、延时、吞吐率、面积、功耗等多种因素。 调度的输入是控制数据流图,其节点表示算子/操作,有向边表示数据依赖,控制依赖,优先依赖。如果没有…

centos 安装composer 教程

打开命令行 php -r "copy(https://getcomposer.org/installer, composer-setup.php);" sudo php composer-setup.php --install-dir/usr/local/bin --filenamecomposer composer --version sudo chmod us /usr/local/bin/composer Super18120/article/details/14388…

C语言_数据结构总结2:动态分配方式的顺序表

0——静态分配内存的顺序表和动态分配内存的顺序表的相同之处和不同之处 相同之处 基本操作逻辑相同&#xff1a;无论是静态分配还是动态分配的顺序表&#xff0c;其核心的操作逻辑是一致的。例如插入操作都需要将插入位置之后的元素依次后移&#xff0c;删除操作都需要将删除…

WSL安装及问题

1 概述 Windows Subsystem for Linux&#xff08;简称WSL&#xff09;是一个在Windows 10\11上能够运行原生Linux二进制可执行文件&#xff08;ELF格式&#xff09;的兼容层。它是由微软与Canonical公司合作开发&#xff0c;开发人员可以在 Windows 计算机上同时访问 Windows 和…

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…

HeidiSQL:一款免费的数据库管理工具

HeidiSQL 是一款免费的图形化数据库管理工具&#xff0c;支持 MySQL、MariaDB、Microsoft SQL、PostgreSQL、SQLite、Interbase 以及 Firebird&#xff0c;目前只能在 Windows 平台使用。 HeidiSQL 的核心功能包括&#xff1a; 免费且开源&#xff0c;所有功能都可以直接使用。…

Ae 效果详解:VR 色差

Ae菜单&#xff1a;效果/沉浸式视频/VR 色差 Immersive Video/VR Chromatic Aberrations VR 色差 VR Chromatic Aberrations效果用于模拟镜头色散现象&#xff0c;在 VR 视频中制造 RGB 通道错位的色彩偏移&#xff0c;以增强视觉风格或创造数字失真效果。 本效果适用于所有色深…

计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【Linux内核系列】:深入解析输出以及输入重定向

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统以及文件系统调用接口 用c语言简单实现一个shell外壳程序 内容回顾 那么在此前的学习中&#xff0c;我们对于Linux的文件系统已经有了…

PyTorch系列教程:Tensor.view() 方法详解

这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用&#xff0c;与reshape()方法的区别&#xff0c;同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor&#xff0c;它与原始Tensor共享相同的底层数据&#xff0c;但具有不同的形状或…

软件测试的基础入门(二)

文章目录 一、软件&#xff08;开发&#xff09;的生命周期什么是生命周期软件&#xff08;开发&#xff09;的生命周期需求分析计划设计编码测试运行维护 二、常见的开发模型瀑布模型流程优点缺点适应的场景 螺旋模型流程优点缺点适应的场景 增量模型和迭代模型流程适应的场景…