Java 常用语法极简通关(二):八种基本类型与 String——Java 类型世界的两大阵营

📅 2026/8/11 18:42:25
Java 常用语法极简通关(二):八种基本类型与 String——Java 类型世界的两大阵营
开篇一个物资采购结算的小程序第一章我们看到了 Java 程序的骨架这一章往里走看看装数据的容器——类型。还是老规矩先看一段活的代码煤矿物资采购的结算程序算出各种物料的金额并汇总。public class PurchaseApp { public static void main(String[] args) { // 物料1锚杆 String itemName1 锚杆; int quantity1 1200; // 数量根 double price1 18.5; // 单价元 // 物料2液压油 String itemName2 液压油; int quantity2 40; // 数量桶 double price2 320.0; // 单项金额 数量 × 单价 double amount1 quantity1 * price1; double amount2 quantity2 * price2; // 汇总 double total amount1 amount2; long totalInFen (long) (total * 100); // 折算成分转成整数 // 是否超过预算 double budget 40000.0; boolean overBudget total budget; // 采购员等级用单个字符表示 char buyerLevel A; System.out.println(itemName1 金额 amount1 元); System.out.println(itemName2 金额 amount2 元); System.out.println(合计 total 元 totalInFen 分); System.out.println(是否超预算 overBudget); System.out.println(采购员等级 buyerLevel); } }运行结果锚杆 金额22200.0 元 液压油 金额12800.0 元 合计35000.0 元3500000 分 是否超预算false 采购员等级A这段代码里Java 的八种基本类型出现了六种int、double、boolean、char、long外加转换剩下的byte、short、float我们马上讲到。先立一个总纲Java 的类型分两大阵营八种基本类型primitive是值本身其余一切——String、数组、你自己写的类——都是引用类型。这两个阵营的行为差异是新手无数 bug 的源头。本章讲透它们。第一部分八种基本类型——一张表就够了Java 有且只有八种基本类型分四类分类类型占用空间举例日常使用频率整数byte1 字节-128~127byte b 100;低整数short2 字节short s 5000;低整数int4 字节约 ±21 亿int age 30;极高整数默认用它整数long8 字节long fen 3500000L;中int 装不下时用小数float4 字节float f 3.14F;低小数double8 字节double price 18.5;极高小数默认用它字符char2 字节char level A;中布尔boolean—boolean ok true;极高按本系列只讲常用的原则给你三条极简结论整数就用int除非确定会超过 21 亿比如毫秒时间戳、以分为单位的大金额那就用long数值后面加Llong t 1723000000000L;小数就用double。float要加F后缀、精度还低业务代码里基本不用知道它存在即可。byte、short、float日常几乎不手写多在底层 IO、旧代码里出现见到了能看懂就行。两个细节写整数字面量时Java 默认当 int 处理写小数字面量默认当 double 处理。所以float f 3.14;会报错3.14 是 double不能直接塞进更小的 float必须写3.14F。char用单引号只能包一个字符A、中都合法。boolean只有true和false没有第三态也不能用 0 和 1 代替。第二部分类型转换——自动的和强制的案例里有两处转换正好把两种转换方式都演示了。自动转换小杯倒进大杯不用管double amount1 quantity1 * price1; // int × double → doublequantity1是 intprice1是 doubleint 乘之前会被自动提升为 double结果是 double。规则一句话范围小的类型放进范围大的类型自动转不丢数据。转换链是byte → short → int → long → float → double char ↗所以int i A;合法i 的值是 65字符的本质是 Unicode 编码数字double d 100;也合法。强制转换大杯倒进小杯自己负责long totalInFen (long) (total * 100);total * 100是 double要装进 long——范围大的进范围小的可能丢数据编译器要求你显式确认写法是在值前面加(目标类型)double d 9.99; int i (int) d; // i 是 9不是 10强转直接砍掉小数不做四舍五入新手必记(int)是截断不是四舍五入。想四舍五入用Math.round()第十章讲工具类时会细说。第三部分String——最常用的引用类型基本类型讲完了现在看另一大阵营的代表。String 是 Java 里使用频率最高的类型没有之一但它不是基本类型是一个类。这个事实引出三个必知点。必知点一字符串是不可变的immutableString s 锚杆; s s 12m;第二行并不是修改了原来的字符串而是新建了一个字符串对象让 s 指向新对象旧对象等待垃圾回收。日常用没问题但在循环里反复拼接会产生大量临时对象——性能坑第四章讲 StringBuilder 时解决它。必知点二字符串拼接用其他类型自动转字符串System.out.println(合计 total 元);任何类型和字符串用拼接都会先被转成字符串。注意一个顺序陷阱System.out.println(结果 1 2); // 输出结果12 System.out.println(结果 (1 2)); // 输出结果3从左往右算第一行里结果 1先拼成了字符串后面的 2 只能跟着拼加括号让加法先算就对了。必知点三重点比较字符串内容必须用 equals不能用 这是 Java 新手最经典的坑没有之一。看这段代码String a new String(锚杆); String b new String(锚杆); System.out.println(a b); // false ← 惊不惊喜 System.out.println(a.equals(b)); // true内容明明一样却返回 false。原因在于两大阵营的本质区别基本类型变量里存的就是值本身比较的就是值int x 5; int y 5;则x y为 true天经地义。引用类型变量里存的是对象的地址内存中的位置。a和b是两个不同的对象地址不同所以为 false。对引用类型回答的问题是是不是同一个对象而不是内容一不一样。想比较内容要用 String 类提供的equals方法String input 维修; if (input.equals(维修)) { // 正确姿势 System.out.println(生成维修工单); }实际开发中更稳妥的写法是把已知的字面量放前面避免 null 报错if (维修.equals(input)) { ... }这种写法即使input是 null 也不会抛空指针异常——空指针NullPointerException是 Java 程序最常见的事故第八章异常处理会专门讲。补一个容易混淆的点直接写双引号的字符串字面量会被 JVM 放进字符串常量池复用所以String x abc; String y abc; System.out.println(x y); // 居然是 true常量池里同一个对象正因为这种有时 true 有时 false的不确定性规矩只有一条比较字符串内容永远用 equals忘掉 在字符串上的存在。常踩的坑排雷清单字符串用 比较本章最大的坑见上。内容比较一律equals。整数相除丢掉小数int result 7 / 2;结果是 3不是 3.5——int 除 int 得 int。想要小数至少一边写成 double7.0 / 2或(double) 7 / 2。强转当四舍五入用(int) 9.99得 9。要四舍五入请用Math.round()。long 忘记加 Llong t 1723000000000;编译报错因为字面量默认 int超范围了。加L就好。boolean 写 0/1if (flag 1)在 boolean 上行不通Java 的 boolean 和数字完全不通婚。char 和 String 混用引号维修两个字符进单引号编译报错String s A;也报错——类型不匹配。单引号 char、双引号 String泾渭分明。本章小结Java 类型分两大阵营八种基本类型存值本身引用类型String、数组、类存地址。日常取舍整数int、大额long L、小数double、真假boolean、单字符char A其余三种认识即可。转换小进大自动转大进小加(类型)强转强转是截断不是四舍五入。String 是类、不可变拼接用注意从左到右的顺序陷阱。比较字符串内容用equals永远不用——引用类型的比的是地址。下一章运算符与流程控制——通过一个巡检成绩评级 批量统计的案例把 if、switch、三种循环讲透重点拆解 switch 的 break 穿透和增强 for 为什么成为遍历的主流。