Java 与 C 核心差异对照
先看这张表,能省一半复习时间:凡是「一样的」快速跳过,凡是「不一样的」重点记。
| 维度 | Java | C | 备注 |
|---|---|---|---|
| 运行方式 | javac 编译字节码,JVM 解释执行 | gcc 直接编译成机器码 | C 无虚拟机,性能更贴近硬件 |
| 内存管理 | 垃圾回收器自动回收 | 手动 malloc / free | C 忘记 free = 内存泄漏 |
| 字符串 | String 对象,不可变,有 length() |
char[],必须以 '\0' 结尾 |
见 11-字符串 |
| 数组 | 有 .length,越界抛异常 |
无长度信息,越界不报错 | 见 08-数组 |
| 参数传递 | 基本类型传值,对象传引用 | 一律值传递 | 要改外部变量必须传指针 |
| 指针 | 无(只有对象引用) | 核心机制 * & -> |
见 09-指针 |
| 函数重载 | 支持 | 不支持 | 函数名同作用域唯一 |
| 面向对象 | class + 方法 + 继承 | 只有 struct(纯数据) |
见 12-结构体 |
| 布尔类型 | boolean |
传统用 int,C99 才有 <stdbool.h> |
0 假,非 0 真 |
| 引入代码 | import 包 |
#include 文本包含 |
是「粘贴」不是「引用」 |
| 预处理 | 无 | #define 宏,纯文本替换 |
无类型检查 |
| 异常处理 | try / catch / finally | 没有异常,靠返回值 + errno |
见 17-类型转换与错误处理 |
| 类型系统 | 强类型、自动装箱 | 弱一些,隐式转换多 | 见 03-数据类型与变量 |
| 内存泄漏 | GC 兜底 | 完全靠自己 | 见 19-内存管理 |
一句话总结
Java 给你一张安全网(GC、异常、边界检查);C 把安全网全撤了,换来性能与对内存的绝对控制。学 C 本质就是学「如何自己管好内存」。