变量与数据类型

整型

1
2
3
4
5
6
7
8
9
byte smallNum = -111; // byte 范围是 -128 到 127
short shortNum = 32000; // short 范围是 -32768 到 32767
int age = 2000000000; // int 范围是 -2147483648 到 2147483647
long bigNum = 9000000000L; // long 范围是 -9223372036854775808 到 9223372036854775807

System.out.println(smallNum);
System.out.println(shortNum);
System.out.println(age);
System.out.println(bigNum);

byte 范围是 -128 到 127

核心特点:极小,省空间。像一个火柴盒

用途

文件处理/网络传输:这是最主要的用途。当你读取一个图片、视频或者通过网络发送数据时,数据是以“字节流”(byte[])的形式存在的。

硬件控制:比如你要控制一个智能灯泡的开关(0或1),或者读取传感器的原始数据,通常用 byte。

日常业务开发几乎不用它存数字。

short 范围是 -32768 到 32767

核心特点:不大不小,很尴尬。像一个饭盒

用途

老旧系统兼容:在几十年前内存很贵的时代,为了省钱会用 short。

特定算法:某些图像处理算法里为了节省显存会用到。

实战建议:现在内存便宜了,为了避免不小心溢出,Java 程序员已经基本弃用 short 了。哪怕数字很小,我们通常也懒得切,直接用 int。

int 范围是 -2147483648 到 2147483647 (最常用int)

核心特点:标准大小,计算速度最快。像一个双肩背包

用途

绝大多数计数场景:用户年龄、购物车商品数量、循环次数 (for 循环)、数组下标。

数据库ID:如果你的网站用户量在千万级别以内,ID 通常就是 int。

只要数字不超过 20 亿,闭着眼睛选 int 没错。

long 范围是 -9223372036854775808 到 9223372036854775807

核心特点:巨大无比。像一个集装箱

用途

时间戳System.currentTimeMillis() 返回的是从 1970 年到现在的毫秒数,这个数字 int 装不下。

大型网站 ID:淘宝订单号、微博 ID、Twitter ID(雪花算法生成的 ID 都是 long)。

文件大小:计算 4GB 以上的高清电影大小。

记忆口诀:跟时间和超大数据有关的,记得加 L 用 long。

浮点型

1
2
3
4
5
6
7
@Test
public void TestDecimals() {
float floatNum = 5.75f; // float 精度约为 7 位十进制数字
double doubleNum = 19.99; // double 精度约为 15-16 位十进制数字
System.*out*.println(floatNum);
System.*out*.println(doubleNum);
}

double 精度约为 15-16 位十进制数字

精度:约 15-16 位有效数字。

地位:Java 中小数的默认类型(写一个 3.14,Java 默认它就是 double)。

用途

日常计算:比如计算BMI指数、计算圆的面积、物理题计算(速度、加速度)。

普通统计数据:比如计算“平均分”、“增长率”(85.5分,12.3%)。

经纬度:地图上的 GPS 坐标(如 39.9042, 116.4074),double 的精度足够定位到厘米级,完全够用。

float 精度约为 7 位十进制数字

精度:约 6-7 位有效数字。

地位:为了省内存而生的产物,必须加后缀 f

为什么极少使用?

精度太烂:7 位精度真的很危险。比如经纬度用 float 存,可能你定位在家里,结果显示你在邻居家,误差能有几米到几十米。

内存不值钱:现在的服务器内存很大,不在乎 double 多占的那 4 个字节。

麻烦:每次赋值都要写个 f,很多程序员嫌烦。

那它还活着干嘛?(特殊用途)

**游戏开发 (Unity/Unreal)**:在 3D 游戏中,要处理成千上万个粒子的坐标。因为计算量巨大,且对精度要求不用那么高(子弹打偏 0.0001 毫米也没人看得出来),用 float 能比 double 快很多,且极大节省显存。

机器学习/深度学习:训练 AI 模型时,数据量是海量的(亿级)。使用 float(甚至更低的精度)可以显著加快训练速度,减少 GPU 显存占用。

极低配置的嵌入式设备:比如几块钱的芯片,处理能力很弱,double 算不动。

CHAR

1
2
char letter = 'A'; // char 用单引号表示单个字符
char cnChar = '汉'; // char 也支持 Unicode 字符

范围/大小:2 个字节 (16位)。

核心特点

独行侠:只能存 1 个 字符(比如 ‘A’, ‘中’, ‘&’)。

单引号:必须用 ' ' 包裹。

双面人:表面是字符,本质是整数(Unicode 编码)。你可以把它当数字用(’A’ + 1 = 66)。

用途

底层文本处理:当你需要一个字一个字地分析文本时(比如判断用户输入里面有没有非法符号)。

很多算法题:字符串反转、回文判断等。

日常业务中,我们很少单独定义 char 变量,通常都是直接用 String(字符串)。

布尔

1
boolean isJavaFun = true; // boolean 只能是 truefalse

范围/大小:理论上只占 1 位 (bit),但具体看虚拟机实现。

核心特点

极简主义:只有两个值:true (真) 或 false (假)。

Java 特色不能像 C 语言那样用 0 代表 false,1 代表 true。在 Java 里,它是独立的类型,和数字没关系。

用途

逻辑判断if (isLogin)while (hasNext)。控制程序的流程,决定走哪条路。

开关/标记:记录状态,比如“灯是开的吗?”、“支付成功了吗?”。

命名规范(重要技巧):布尔变量通常以 ishascan 开头,例如 isViphasTicketcanEdit

银行资金用什么?

用BigDecimal

image.png

对应的mysql字段设置 java类型与mysql字段设置

  1. 整数家族 (Integer Types)
Java 类型 MySQL 类型 推荐理由与场景
int INT (或 INTEGER) 绝大多数情况的默认匹配。范围和 Java 的 int 基本一致。
long BIGINT 对应 Java 的 long。用于存时间戳雪花算法ID、超大计数值。
boolean TINYINT(1) 特别注意! MySQL 里没有 boolean 类型。通常习惯用 TINYINT,存 0 代表 false,1 代表 true。
byte / short TINYINT / SMALLINT 用得比较少。TINYINT 倒是常用来存“状态枚举”(比如 0=待审核, 1=通过, 2=驳回)。
  1. 浮点与金额 (Floating Point & Money)
Java 类型 MySQL 类型 推荐理由与场景
BigDecimal DECIMAL(M, D) 存钱必须用这个!例如 DECIMAL(10, 2) 表示总共10位数字,其中2位是小数(最大能存 99999999.99)。
double DOUBLE 用于经纬度、科学计算、普通的统计数据(不涉及金钱交易)。
float FLOAT 极少使用,理由同 Java,精度太低

3.字符串

Java 类型 MySQL 类型 推荐理由与场景
String VARCHAR(n) 最常用n 代表最大字符数。例如 VARCHAR(255)。特点是变长,你存 “ABC” 它就只占 3 个字的空间,不浪费。
String CHAR(n) 定长字符串。比如身份证号、手机号这种长度固定的。特点是速度快,但如果你存 “A” 且定义了 CHAR(10),它后面会补空格,占满 10 个字。
String TEXT / LONGTEXT 大文本。存一篇博客文章、商品详情介绍、JSON大字符串时使用。
char CHAR(1) 对应 Java 的 char,但在数据库设计中很少单独为了一个字符开字段,通常也直接用 VARCHAR 或 CHAR
  1. 时间日期 (Date & Time)
Java 类型 MySQL 类型 推荐理由与场景
LocalDateTime DATETIME 最常用。记录“年月日时分秒”。例如:2026-01-20 14:30:00
LocalDate DATE 只记录“年月日”。例如:生日 1990-01-01
LocalTime TIME 只记录“时分秒”。
long (时间戳) BIGINT 有些公司喜欢直接存毫秒数(例如 1678888888000),方便跨时区处理。

上一章 目录 下一章
[hello world](/2026/04/04/hello world/) java基础 数据类型的转换