🎯 本章你会学到:基本类型大小固定、包装类与装箱、String 为什么不可变。建议边读边敲,每节练习先自己做,再展开答案对照。
Java 的类型大小是**语言规范写死的**:int 永远是 4 字节,long 永远是 8 字节——这点和 C/C++ 完全不同,也意味着 Java 程序的行为不会因为平台而变。
| 类型 | 大小 | 范围/说明 |
|---|---|---|
| byte | 1 字节 | -128 ~ 127 |
| short | 2 字节 | -32768 ~ 32767 |
| int | 4 字节 | 约 ±21 亿(最常用) |
| long | 8 字节 | 约 ±9.2×10^18,字面量要加 L |
| float / double | 4 / 8 字节 | double 是默认浮点类型 |
| char | 2 字节 | UTF-16 字符,不是 1 字节! |
| boolean | 1 位(规范未定大小) | true / false |
基本类型 vs 包装类
类型与装箱
public class Main {
public static void main(String[] args) {
int n = 7;
double d = 2.0;
System.out.println("n=" + n);
System.out.printf("d=%.2f%n", d);
System.out.println("n/d=" + (n / d)); // 自动提升为 double
System.out.println("int bytes=" + Integer.BYTES);
Integer boxed = 1000;
Integer other = 1000;
System.out.println("boxed == other: " + (boxed == other));
System.out.println("boxed.equals(other): " + boxed.equals(other));
}
}运行结果
n=7
d=2.00
n/d=3.5
int bytes=4
boxed == other: false
boxed.equals(other): true
输出说明两件事:n / d 会自动把 n 提升成 double;而 == 对包装类比较的是**对象引用**,超出缓存范围(-128~127)后 Integer 会各自新建对象,所以 == 得 false,必须用 equals。
字符串不可变
String 与 StringBuilder
public class Main {
public static void main(String[] args) {
String a = "hello";
String b = a.toUpperCase(); // 生成新对象,a 不变
System.out.println(a + " -> " + b);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(i); // 循环里拼接用 StringBuilder
}
System.out.println(sb.toString());
}
}运行结果
hello -> HELLO
01234
⚠️ 易错点 判断字符串内容相等必须用
a.equals(b);a == b 比较的是引用地址,两个内容相同的字符串可能是 false。⚠️ 易错点 循环里用
s += x 拼接会不断创建新对象(O(n²)),累加字符串用 StringBuilder。✍️ 本节练习
2.1必做圆的面积
读入半径 r(double),输出面积,保留 2 位小数。圆周率用 3.14159265。
输入 一个实数 r。
输出 一行 area=面积(2 位小数)。
样例输入
2样例输出
area=12.57💡 提示 System.out.printf("area=%.2f%n", ...);注意 %n 是平台无关的换行。
✅ 查看参考答案与解析
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double r = sc.nextDouble();
System.out.printf("area=%.2f%n", 3.14159265 * r * r);
}
}解析 printf 的格式符和 C 一样;%.2f 四舍五入到 2 位小数。
2.2挑战单词大写与长度
读入一个单词,输出它的大写形式和字符个数,中间用空格分隔。
输入 一个单词。
输出 一行:大写 长度。
样例输入
hello样例输出
HELLO 5💡 提示 toUpperCase() 返回新字符串;length() 求长度(注意有括号)。
✅ 查看参考答案与解析
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String w = sc.next();
System.out.println(w.toUpperCase() + " " + w.length());
}
}解析 数组的 length 是字段(没有括号),字符串的 length() 是方法(有括号)——这是 Java 新手最容易混的一处。
📚 本文概念都在知识大全:
JVM 与字节码 · JDK · String 与 StringBuilder · 集合框架 · 泛型 · 受检异常 · 继承与接口 · record · Stream API