You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中main方法的args与arg区别及运行原理问询

Java main方法中args vs arg的常见疑问解答

1. args和arg有什么区别?

简单说,它们只是变量名的区别,没有本质功能差异。

  • args是Java社区约定俗成的命名,全称是"arguments",用来表示传递给main方法的命令行参数数组;
  • arg只是另一个合法的Java标识符,你甚至可以叫它cmdParams或者myArgs,只要是符合Java命名规则的变量名都可以。

本质上,二者都是String[]类型的变量,作用都是接收JVM传入的命令行参数。

2. 为什么public static void main(String[] arg)能替代public static void main(String[] args)正常运行?

核心原因:JVM只关心main方法的签名,不关心参数名

Java虚拟机(JVM)在启动程序时,会在主类中寻找符合以下要求的方法作为入口点:

  • 修饰符必须是public static
  • 返回值类型是void
  • 方法名必须是main
  • 参数类型必须是String[](也就是字符串数组)

这里的关键是参数类型,而不是参数的名字。arg和args只是这个String数组变量的名字,JVM根本不会在意它叫什么——它只需要知道这个位置要接收一个String数组,用来传递命令行参数。

具体运行原理

当你通过命令行运行Java程序时(比如java MyApp hello world),JVM会:

  1. 加载指定的主类MyApp;
  2. 在类中查找符合上述签名的main方法;
  3. 将命令行中主类名后的参数(hello和world)封装成一个String[]数组;
  4. 调用这个main方法,并把刚才的数组传递进去——不管这个参数变量叫args还是arg,JVM都会把数组传递给它。

使用arg代替args会更高效吗?

完全不会!

变量名只是给开发者看的“别名”,在编译成字节码后,变量名会被转换成局部变量表中的索引编号。不管你叫它arg还是args,编译后的字节码是完全一样的,运行时的性能没有任何区别。甚至编译器在编译时会忽略变量名(除了调试信息),所以根本不存在所谓的“更高效”。


内容的提问来源于stack exchange,提问作者flyingcyclops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:38:29