什么是;字符串[]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