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会:
- 加载指定的主类
MyApp; - 在类中查找符合上述签名的
main方法; - 将命令行中主类名后的参数(
hello和world)封装成一个String[]数组; - 调用这个
main方法,并把刚才的数组传递进去——不管这个参数变量叫args还是arg,JVM都会把数组传递给它。
使用arg代替args会更高效吗?
完全不会!
变量名只是给开发者看的“别名”,在编译成字节码后,变量名会被转换成局部变量表中的索引编号。不管你叫它arg还是args,编译后的字节码是完全一样的,运行时的性能没有任何区别。甚至编译器在编译时会忽略变量名(除了调试信息),所以根本不存在所谓的“更高效”。
内容的提问来源于stack exchange,提问作者flyingcyclops
相关产品推荐
相关产品推荐

