Вопрос:
Когда я запускаю следующую программу:
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?”?:-) Это массив аргументов командной строки, предоставленных программе, причем каждый аргумент имеет 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 указывает, где в памяти находится массив, поэтому она различна для разных вызовов вашей программы, но это неуказанное поведение и не будет для вас никакой пользы. )
Ответ №1
String[] args В основном методе находится массив строк аргументы командной строки.
[Ljava.lang.String;@1d1e730 – это имя класса ([Ljava.lang.String is String[]) и hashcode объекта (@1d1e730);
если вы хотите напечатать фактические значения строк в массиве, вы можете использовать простой для каждого цикла:
for(String arg:args) System.out.println(arg); Ответ №2
Это форма 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.
Ответ №3
Реализация по умолчанию для метода toString для объекта classname;@identityHashCode.
Я думаю, это то, что вы ожидаете:
System.out.println(java.util.Arrays.toString(args)); Ответ №4
String[] args является массивом строк и содержит аргументы, которые были указаны при запуске приложения. Java не требует, чтобы вы использовали имя args, вы могли бы точно указать String[] foo, но это станет непонятным, если вы позже прочтете свой код еще раз.
Ответ №5
Это строковый массив.
- Измените свой код так:
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 Проверьте ваши аргументы, то вы увидите любое содержимое, которое вы передаете..
Ответ №6
У метода 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]); } }
Готов протестировать эту программу с интерфейсом командной строки:
java HelloWorld a b c
Мы видим, что эта программа печатает эти аргументы после ‘java Helloworld’
б
с
Ответ №7
Давайте сделаем это проще
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