当我运行以下程序时:
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
”是什么意思?
答案 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 toString
(String[]
数组)的默认String
返回值。见Object#toString
。 [
表示“数组”,L
表示“类或接口”,java.lang.String
不言自明。那部分来自Class#getName()
。 ;@153c375
为;@
,后跟数组的hashCode
作为十六进制字符串。 (我认为hashCode
的{{1}}的默认实现表明数组在内存中的位置,这就是为什么它对程序的不同调用有所不同,但这是未指定的行为,不会有任何用处无论如何,对你来说。)
答案 1 :(得分:8)
String[] args
是command line arguments的字符串数组。
[Ljava.lang.String;@1d1e730
是类名([Ljava.lang.String
是String[]
)和对象的哈希码(@1d1e730
);
如果要在数组中打印字符串的实际值,可以使用简单的for-each循环:
for(String arg:args)
System.out.println(arg);
答案 2 :(得分:7)
这是name mangling的一种形式,用于消除方法重载的歧义。方法名称附加了一系列描述参数和返回类型的字符:参数在括号内依次出现,返回类型在右括号后面。代码如下:
所以根据上面的代码[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]);
}
}
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