Что означает "String [] args" содержится в 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
"?
Ответы
Ответ 1
Обновление. Я только что понял, что я никогда не отвечал на вопрос "Что означает" String [] args "содержать в java?"?:-) Это массив аргументов командной строки, предоставленных программе, причем каждый аргумент имеет String
в массиве.
И теперь мы возобновляем наш регулярный ответ...
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]);
}
}
}
Для 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 default toString
возвращает значение для String[]
(массив String
). См. Object#toString
. [
означает "массив", L
означает "класс или интерфейс", а java.lang.String
не требует пояснений. Эта часть происходит от Class#getName()
. ;@153c375
- это ;@
, за которым следует hashCode
массива в виде шестнадцатеричной строки. (Я думаю, что реализация по умолчанию hashCode
для Object
указывает, где в памяти находится массив, поэтому она различна для разных вызовов вашей программы, но это неуказанное поведение и не будет для вас никакой пользы. )
Ответ 2
String[] args
В основном методе находится массив строк аргументы командной строки.
[Ljava.lang.String;@1d1e730
- это имя класса ([Ljava.lang.String
is String[]
) и hashcode объекта (@1d1e730
);
если вы хотите напечатать фактические значения строк в массиве, вы можете использовать простой для каждого цикла:
for(String arg:args)
System.out.println(arg);
Ответ 3
Это форма name mangling, используемая для переадресации метода устранения неоднозначности. Имя метода добавляется рядом символов, описывающих параметры и возвращаемый тип: параметры появляются последовательно в круглых скобках, а тип возврата следует за закрывающей скобкой. Коды заключаются в следующем:
- Z: boolean
- B: байт
- C: char
- S: короткий
- I: int
- J: long
- F: float
- D: double
- L full-qual-class-name;: полностью квалифицированный класс
- [тип: массив типа
- V: void
Итак, согласно приведенным выше кодам [Ljava.lang.String;@153c375
Массив строки (полное имя класса java.lang.String), за которым следует hascode.
Ответ 4
Реализация по умолчанию для метода toString
для объекта classname;@identityHashCode
.
Я думаю, это то, что вы ожидаете:
System.out.println(java.util.Arrays.toString(args));
Ответ 5
String[] args
является массивом строк и содержит аргументы, которые были указаны при запуске приложения. Java не требует, чтобы вы использовали имя args, вы могли бы точно указать String[] foo
, но это станет непонятным, если вы позже прочтете свой код еще раз.
Ответ 6
Это строковый массив.
- Измените свой код так:
public class Test{
public static void main(String[] args){
System.out.println(args[0]);
}
}
- Теперь скомпилируйте этот код:
$>javac Test.java
- Теперь запустите:
$> тест java привет
Это напечатает: "привет"
Потому что "привет" - это аргумент, который вы передаете своему классу.
Если вы попробуете: args[x], where x=0..n
и запустите ваш класс через командную строку: java Проверьте ваши аргументы, то вы увидите любое содержимое, которое вы передаете..
Ответ 7
У метода main есть параметр, который является массивом ссылок String.
Таким образом, каждый раз, когда вы пытаетесь напечатать аргументы, он дает вам место в памяти массива 'args', потому что этот аргумент массива String находится в памяти для элементов массива.
Это говорит о том, что у вас есть простая программа под названием HelloWorld.java, например:
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
Мы видим, что эта программа печатает эти аргументы после 'java Helloworld'
б
с
Ответ 8
Давайте сделаем это проще
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