main()方法中的java args数组混淆(null检查)

时间:2012-09-10 20:00:18

标签: java

我对某事感到困惑。我写了一个小代码片段。

import java.util.*;
class AA
{
  public static void main(String args[])
  {
     if(args == null )
     {
          System.out.println("I am null");
     }
     else{
           System.out.println(args);
      }
 }
 }

这是一个简单的测试。虽然我没有从命令行传递任何东西 作为参数但仍然args不为null,这意味着JVM将其初始化为 类似String数组的东西。为什么有这个背后的具体原因?我好奇 知道。任何指针都会有所帮助。 谢谢, 本

6 个答案:

答案 0 :(得分:8)

当你没有传递任何内容时,args不是null - 为空

 if(args.length == 0)
 {
      System.out.println("I am empty");
 } else{
       System.out.println(args);
 }

答案 1 :(得分:4)

它是语义的。如果没有参数,则表示您的参数列表为空,但这并不意味着参数的概念不存在。因此args列表是一个空数组(即没有参数)而不是null(即参数不存在)。

答案 2 :(得分:2)

如果不是因为JVM本身已经初始化了传递给Java程序的args函数的main数组,那么检查null数组是没有错的,所以数组永远不会为null,它只能为空但不能为空。 JVM保证args数组将被初始化。对null的检查仍然没有错,但它是多余的,并没有多大意义,特别是它没有给你的意义(​​在命令行上没有传递参数)。

由于数组将始终初始化,您可以确定它不是null并且只执行空检查:

if(argsl.length == 0) {
//Is empty 
}

你甚至可以直接遍历数组而不必担心NullPointerException:

for(String arg : args) {
    System.out.println(arg);
}

答案 3 :(得分:1)

main方法的参数将包含从命令行传递的字符串参数。如果没有通过,它仍然不是null但是大小为0.试试:

public static void main(String[] args) {
    System.out.println(args[0]);
}

您可以看到抛出异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

答案 4 :(得分:0)

jvm创建并将所有参数作为名为“args”的字符串[]传递。这样做(以及其他原因),以便我们不必检查args对象上的null。这是一件小事,但它节省了很少的时间。

答案 5 :(得分:0)

检查args字符串数组的大小,如果它的值为零而不是其中没有任何内容,并且如果大小大于1,则尝试放置断点(如果使用的是IDE)或迭代数组,以查看数组的内容。