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

Java的4类8种基本数据类型

Java的8种基本数据类型详解

写代码最郁闷的事儿是什么?

  • 代码写完一点运行,控制台输出的全是看不懂的英文。去查报错信息,全是"类型不匹配"、“精度丢失”、“数据溢出”……
  • 或者代码可以成功运行,但输出的计算结果却不正确。

一开始还以为是IDE的问题,后来才明白——Java是强类型语言,数据类型选错了,轻则结果不对,重则程序直接崩溃

什么是基本数据类型

在Java编程中,你创建的每一个变量,都必须先声明它属于哪一类数据。这就像在储物柜里放东西:你必须先说清楚要放的是一本小册子还是一个行李箱,系统才好分配相应大小的格子给你。
Java中的数据分为两种:

  • 基本数据类型:直接存储数值本身,效率高。
  • 引用数据类型:存储的是内存地址,像是存的门牌号。

基本数据类型细分分为4类,共8种:

类型包含存储内容
整数类型byteshortintlong数学中的整数
浮点类型floatdouble数学中的小数
字符类型char单个字符
布尔类型booleantruefalse

整数类型

整数类型就是数学中的整株,共有4种:byteshortintlong

byte:位

byteage=25;bytestatusCode=0;

特点

  • 占用:1字节(8位)
  • 取值范围:-128 ~ 127
  • 默认值:0

什么时候用它?

文件IO操作的时候最常用。比如InputStream.read()返回的就是byte类型,表示一个字节的数据(因为文件在底层本质上就是字节序列)。还有网络传输字节流、大数组优化内存,都用得。

// 读取文件字节InputStreamin=newFileInputStream("data.bin");byteb=(byte)in.read();// 每次读一个字节

short:短整型

shorttemperature=-10;shortstudentCount=305;

特点

  • 占用:2字节(16位)
  • 取值范围:-32768 ~ 32767
  • 默认值:0

short在日常开发中极少使用。只有在内存极度敏感的场景(比如:嵌入式设备、处理特定格式的二进制数据)才可能用到。现在JVM的优化已经很好,服务器内存的成本也相对便宜了,int反而更常用。

int:整型(默认)

intcount=100;intmaxUsers=1000000;intarraySize=1000;

特点

  • 占用:4字节(32位)
  • 取值范围:-2147483648 ~ 2147483647(约±21亿)
  • 默认值:0

int是Java的默认整数类型。你写100这样的字面量,编译器默认就当int`处理。

日常开发中,绝大多数整数场景都是使用int,例如:计数、数组索引、商品数量等,只要不超过21亿,闭眼用int

隐藏大坑:整数溢出

intmax=2147483647;intoverflow=max+1;// 结果:-2147483648

注意:这个BUG比较隐蔽,编译不报错,运行也不报错,但结果完全不对。如果是金额计算时溢出了,那后果真是不堪设想。

long:长整型

longtimestamp=System.currentTimeMillis();// 时间戳longpopulation=7800000000L;// 全球人口,必须加LlongfileSize=1024L*1024L*1024L;

特点

  • 占用:8字节(64位)
  • 取值范围:约±922亿亿
  • 默认值:0L

long一定要加L后缀,否则大数字会被当成int,编译直接报错。

longbig=10000000000L;// 正确,加了Llongbig2=10000000000;// 错误!超出int范围,编译不过

long的常见应用:时间戳、大文件的大小、ID生成等。

整数类型选型指南

类型字节取值范围选型建议
byte1-128~127文件流、字节数组
short2-3万~3万内存敏感场景
int4±21亿日常首选
long8±9万亿亿时间戳、大数值

记住口诀:日常用int,超大整数用long

浮点类型

浮点数就是数学中的小数,包括:floatdouble

float:单精度

floatpi=3.14159f;// 必须加Ffloattemperature=36.6f;

特点

  • 占用:4字节(32位)
  • 精度:约6-7位有效数字
  • 默认值:0.0f

double:双精度(默认)

doubleprice=99.99;// 默认就是double,不用加后缀doubletax=0.08;doubleresult=1.0/3.0;// 0.3333333333333333

特点

  • 占用:8字节(64位)
  • 精度:约15-16位有效数字
  • 默认值:0.0

Java里小数默认是double。所以3.14double3.14f才是float

⚠️ 精度问题

浮点数的精度是有限的,不能精确表示所有小数。这是IEEE 754标准决定的,不是Java的问题。

看这个经典案例

doublea=0.1;doubleb=0.2;doublesum=a+b;System.out.println(sum);// 输出 0.30000000000000004,不是0.3!

金额计算要是这么干,差个几毛钱甚至几块钱,用户不得把你骂死?

正确做法:金额计算用BigDecimal

importjava.math.BigDecimal;BigDecimalprice=newBigDecimal("99.99");BigDecimaltax=newBigDecimal("0.08");BigDecimaltotal=price.multiply(tax);// 8.0,不会有精度问题

float/double对比

类型字节有效位数选型建议
float46-7位图形处理、科学计算
double815-16位日常首选,Java默认

口诀:日常用double,金额用BigDecimalfloat很少用。

字符类型

char:存单个字符

chargrade='A';charzh='中';// 中文OKcharemoji='😀';// emoji也OK

特点

  • 占用:2字节(16位)
  • 范围:0 ~ 65535(Unicode字符)
  • 默认值:’\u0000’(空字符)

Java的charUnicode编码,能表示全球几乎所有语言的字符。中文、日文、emoji表情,统统拿下。

char的几种写法

// 1. 直接写字符charc1='A';// 2. 用Unicode转义charc2='\u0041';// 等价于'A',0041是A的Unicode编码// 3. 用整数(Unicode码点)charc3=65;// 也是'A'// 4. 参与运算System.out.println('A'+1);// 输出66,对应'B'

注意:部分emoji占4个字节,超出了char的表示范围,需要用两个char(代理对)来表示。

布尔类型

boolean:只有真假

booleanisLoggedIn=true;booleanhasPermission=false;

特点

  • 取值:只有true(真)和false(假)
  • 默认值:false

特别注意

  1. 不能用01代替true/false(这跟C语言不一样!)
// 错误写法,编译不过booleanflag=1;// 报错!// 正确写法booleanflag=true;
  1. 不能跟整数相互转换
// 这个也会报错booleanflag=true;intnum=flag+1;// 报错:二元运算符'+'的操作数类型错误
  1. JVM没有明确规定boolean占几个字节,理论上1位就够,但实际通常用1字节存储(内存对齐)。

与君共勉

数据类型看着简单,就只有几个关键字,里面的门道可真不少。整数溢出、浮点精度,这些坑我当年都踩过,也见过很多这类BUG。

特别注意*:

  1. 金额计算千万不要用float/double:这条是铁律,记住就行。
  2. 整数运算时注意溢出:特别是累加、乘法场景。
  3. long类型必须加L后缀:不然编译无法通过。
  4. 能用int就别用short:现代JVM优化好,别过早优化

学编程没有捷径,动手实践才是最好的学习方式。看完这篇文章,打开IDE敲几行代码试试每种类型,感受一下它们的取值范围和特点。

有问题评论区见,看到必回!觉得有用的话,点个赞支持一下~

http://www.gsyq.cn/news/1508644.html

相关文章:

  • hot100 33.搜索旋转排序数组
  • Rust加速Python数据科学:Polars/TikToken/River/HyperJSON实战指南
  • ThinkPHP微盘交易系统源码+宝塔一键部署全套文件
  • LangGraph实战:构建可调试、容错的智能Agent系统
  • 如何用PotPlayer解锁三大网盘视频播放:专业播放器的云端革命
  • Yelp数据EDA实战:业务问题驱动的四层分析漏斗
  • Windows系统终极效率提升指南:5个简单技巧让PowerToys中文汉化版成为你的工作利器
  • 别再傻傻分不清!图解CPU里的算术移位、逻辑移位和循环移位(附C语言代码验证)
  • 医疗预测建模实战:从临床问题出发的AI落地方法论
  • Spring事件驱动开发实操模板:含Maven结构、监听器实现与完整测试
  • WebAssembly AI 插件:浏览器端模型量化推理与内存优化策略
  • 2026年乐山装修公司怎么选?本地业主亲测靠谱指南(附避坑要点) - 优质品牌商家
  • PyTorch模型部署避坑指南:torch.load的map_location参数在不同环境下的正确用法
  • AI真实用户行为报告:从搜索替代到工作流嵌入的四阶跃迁
  • Lunar-Javascript:基于天文算法的传统文化历法计算引擎
  • 救大命!DeepSeek 转 Word 再也不用手动改乱码了!
  • 2025-2026国内不锈钢标牌怎么选?工艺、成本与生产企业综合观察 - 优质品牌商家
  • 别再凭感觉了!手把手教你计算电容串并联的等效耐压(附Excel计算器)
  • Keswani算法:面向非凸-非凹零和博弈的鲁棒优化方法
  • 诺奖得主联手Claude,40轮对话证出12年物理猜想
  • 技术博客代码呈现的四大陷阱与可运行文档实践
  • BGP选路原则--负载分担(9)
  • 【算法题攻略】链表
  • Keil MDK专用ARM Compiler 5.06 for Windows(32位ARM Cortex-M/R/A裸机开发)
  • 多维数据聚合实战:Pandas高维groupby性能与稳定性优化
  • LangChain中文文档切分实战:语义完整性与向量检索优化指南
  • 2026免费一键去图片水印的app推荐,免费去图片水印app排行榜
  • Python 高手编程系列三千四百:何时应该使用多线程
  • Flask生产部署指南:Heroku上线避坑与Gunicorn配置
  • 2026年音乐喷泉行业深度观察:专业公司如何选择?从设计到落地全流程解析 - 优质品牌商家