什么是;字符串[]args";包含在java中吗?

什么是;字符串[]args";包含在java中吗?,java,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”是什么意思?更新:我

当我运行以下程序时:

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
”是什么意思?

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

现在我们继续我们的定期回答

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

您可以像这样循环遍历参数:

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]);
        }
    }
}
public class HelloWorld
{
    public static void main(String [] args)
    {
        for(int i =0; i<args.length; i++)
            System.out.println(""+args[i]);
    }
}
如果不需要索引,也可以这样循环:

public class Test
{
    public static void main(String[] args)
    {
        for (String s : args)
        {
            System.out.println(s);
        }
    }
}
那么,
“[Ljava.lang.String;@153c375”
是什么意思


这是Java默认的
toString
返回值,用于
String[]
(一个
String
数组)。请参阅。
[/code>表示“数组”,而
L
表示“类或接口”,并且
java.lang.String
是不言自明的。该部分来自。数组的
;@153c375
;@
,后跟作为十六进制字符串的
hashCode
。(我认为
对象
hashCode
的默认实现指示数组在内存中的位置,这就是为什么对程序的不同调用它是不同的,但这是未指定的行为,对您没有任何用处。)

字符串[]main方法中的args
是的字符串数组

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

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

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

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

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

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

这是一种用于消除方法重载歧义的方法。方法名称后面是一系列描述参数和返回类型的字符:参数顺序出现在圆括号内,返回类型在右括号后。代码如下:

  • Z:布尔型
  • B:字节
  • C:char
  • S:短
  • I:int
  • J:长
  • F:浮动
  • D:双份
  • L完全限定类名称;:完全限定类
  • [类型:类型的数组]
  • V:无效
所以根据上面的代码
[Ljava.lang.String;@153c375

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

这是一个字符串数组

  • 将您的代码修改为:
  • 现在编译以下代码:
  • $>javac Test.java

  • 现在运行:
  • $>java测试你好

    这将打印:“你好”

    因为“你好”是你传递给你的班级的论点


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

    main方法有一个作为字符串引用数组的参数。 因此,每次尝试打印args时,它都会给出数组“args”的内存位置,因为该字符串数组args在内存中为数组元素定位了一个位置

    也就是说,您有一个名为“HelloWorld.java”的简单程序,如下所示:

    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]);
            }
        }
    }
    
    public class HelloWorld
    {
        public static void main(String [] args)
        {
            for(int i =0; i<args.length; i++)
                System.out.println(""+args[i]);
        }
    }
    
    我们可以看到,这个程序在“java Helloworld”之后打印了数千个参数 A. B 让我们把它简单化

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

    公共类测试{
    公共静态void main(字符串[]args){
    System.out.println(“传递的参数为:“+args[0]);
    }
    }
    
    2:现在按以下方式编译它

    javac test.java
    
    3:现在通过传递参数来运行此操作

    java test Ayoub
    
    **输出将是**

    Passed argument is: Ayoub
    
    Passed argument is: Ayoub