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

Eng*_*uad 14 java

当我运行以下程序时:

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(args);
    }
{
Run Code Online (Sandbox Code Playgroud)

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

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

它每次给我不同的输出

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

T.J*_*der 20

更新:我刚刚意识到我从来没有回答过"在Java中包含什么"字符串[] args"的问题?" :-)这是一个提供给程序的命令行参数数组,每个参数都是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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因为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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

这是Java ((数组)的默认toString返回值.见.的手段"阵列",则是指"类或接口",并且是不言自明的.那部分来自.的是随后的阵列作为十六进制字符串的.(我认为for 的默认实现表明数组在内存中的位置,这就是为什么它对程序的不同调用有所不同,但这是未指定的行为,无论如何都不会对你有任何用处.)String[]StringObject#toString[Ljava.lang.StringClass#getName();@153c375;@hashCodehashCodeObject


MBy*_*ByD 8

String[] args在main方法中是命令行参数的String数组.

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

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

for(String arg:args)
    System.out.println(arg);
Run Code Online (Sandbox Code Playgroud)


Ume*_*cha 7

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

  • Z:布尔值
  • B:字节
  • C:char
  • S:简短
  • 我:int
  • J:很久
  • F:漂浮
  • D:加倍
  • L完全合格的班级名称; :完全合格的班级
  • [类型:类型数组
  • V:无效

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

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