args.length 为 0 表示无命令行参数,此时 args 是非 null 的空数组;应使用 args.length == 0 判断,而非 args == null;增强 for 循环可安全遍历空数组。

当 Java 程序启动时未传入任何命令行参数,args.length 的值就是 0,此时 args 是一个长度为 0 的空数组(不是 null),这是 JVM 规范明确保证的行为。
args 是空数组,不是 null
Java 虚拟机在调用 main(String[] args) 方法时,总会传入一个 String[] 类型的数组。即使没加任何参数,JVM 也会创建一个长度为 0 的数组对象,因此:
-
args != null—— 永远成立,不会触发NullPointerException -
args.length == 0—— 表示用户未提供任何命令行参数 -
args.length > 0—— 表示至少有一个参数,可安全访问args[0]
常见误判写法及修正
新手容易写成 if (args == null) 来判断是否传参,这是不必要的,也掩盖了真实逻辑:
- ❌ 错误:用
if (args == null)判断 —— 这个条件永远不成立 - ✅ 正确:用
if (args.length == 0)判断无参数场景 - ✅ 更稳妥:先检查长度再取值,例如
if (args.length > 0) System.out.println(args[0]);
典型使用示例
以下是一个安全读取第一个参数的简单模板:
立即学习“Java免费学习笔记(深入)”;
- 若希望有参数才执行主逻辑:
if (args.length == 0) { System.err.println("请提供参数"); return; } - 若允许无参数但需设默认值:
String input = args.length > 0 ? args[0] : "default"; - 若要遍历所有参数(安全):
for (String arg : args) { ... }—— 增强 for 循环对空数组天然安全
这个行为由 JVM 实现保证,所有标准 JDK 版本(包括 OpenJDK、Oracle JDK、Zulu 等)均一致,无需额外兼容处理。










