java中包含“String [] args”是什么?

时间:2011-05-11 05:16:54

标签: java

当我运行以下程序时:

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

打印:[Ljava.lang.String;@153c375

当我再次运行时,它会打印:[Ljava.lang.String;@1d1e730

每次给我不同的输出

那么,“[Ljava.lang.String;@153c375”是什么意思?

8 个答案:

答案 0 :(得分:19)

更新:我刚刚意识到我从来没有回答过这个问题“什么”字符串[] args“包含在java中?” :-)这是一个命令数组提供给程序的-line参数,每个参数在数组中为String

我们现在以我们定期安排的答案恢复......

args是一个数组。要查看单个命令行参数,请索引数组 - args[0]args[1]等:

你可以像这样遍历args:

public class Test
{
    public static void main(String[] args)
    {
        int index;

        for (index = 0; index < args.length; ++index)
        {
            System.out.println("args[" + index + "]: " + args[index]);
        }
    }
}

对于java Test one two three,将输出:

args[0]: one
args[1]: two
args[2]: three

如果您不需要索引,请按此循环:

public class Test
{
    public static void main(String[] args)
    {
        for (String s : args)
        {
            System.out.println(s);
        }
    }
}
  

那么,"[Ljava.lang.String;@153c375"是什么意思?

这是Java toStringString[]数组)的默认String返回值。见Object#toString[表示“数组”,L表示“类或接口”,java.lang.String不言自明。那部分来自Class#getName();@153c375;@,后跟数组的hashCode作为十六进制字符串。 (我认为hashCode的{​​{1}}的默认实现表明数组在内存中的位置,这就是为什么它对程序的不同调用有所不同,但这是未指定的行为,不会有任何用处无论如何,对你来说。)

答案 1 :(得分:8)

main方法中的

String[] argscommand line arguments的字符串数组。

[Ljava.lang.String;@1d1e730是类名([Ljava.lang.StringString[])和对象的哈希码(@1d1e730);

如果要在数组中打印字符串的实际值,可以使用简单的for-each循环:

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

答案 2 :(得分:7)

这是name mangling的一种形式,用于消除方法重载的歧义。方法名称附加了一系列描述参数和返回类型的字符:参数在括号内依次出现,返回类型在右括号后面。代码如下:

  • Z:boolean
  • B:byte
  • C:char
  • S:短
  • I:int
  • J:很长
  • F:float
  • D:double
  • L完全合格的班级名称; :完全合格的班级
  • [type:type of type
  • V:void

所以根据上面的代码[Ljava.lang.String;@153c375

字符串数组(java.lang.String完全限定类名)后跟hascode。

答案 3 :(得分:4)

Object的toString方法的默认实现是classname;@identityHashCode。 我想,这就是你的期望:

System.out.println(java.util.Arrays.toString(args));

答案 4 :(得分:4)

String[] args是一个字符串数组,包含应用程序启动时给出的参数。 Java不要求你使用名称args,你也可以指定String[] foo,但如果你以后再次阅读你的代码,这将使事情变得不清楚。

答案 5 :(得分:2)

这是一个字符串数组。

1.将您的代码修改为:

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

2。java Test hello

这将打印:hello

因为hello是你传给你班级的论据。

如果您尝试:args[x], where x=0..n并通过命令行运行您的类:java测试您的参数,然后您将看到您传递的任何内容..

答案 6 :(得分:0)

main方法有一个参数,它是一个String引用数组。 因此,每当您尝试打印args时,它都会为您提供数组的内存位置&#39; args&#39;因为这个String数组args在数组元素的内存中找到了一个位置。

那就是说你有一个名为&#39; HelloWorld.java的简单程序&#39;像这样:

public class HelloWorld
{
    public static void main(String [] args)
    {
        for(int i =0; i<args.length; i++)
            System.out.println(""+args[i]);
    }
}

准备使用命令行界面测试此程序: enter image description here

java HelloWorld a b c

我们可以看到这个节目在&#39; java Helloworld&#39;之后打印出来。 一个 b ç

答案 7 :(得分:0)

让它变得简单

1:编写一个简单的类,名为“ test

public class test {
    public static void main(String[] args) {
        System.out.println("Passed argument is: " + args[0]);
    }
}

2:现在按以下方式进行编译

javac test.java

3:现在通过传递一个参数来运行它

java test Ayoub

**输出将是**

Passed argument is: Ayoub