Что означает "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

Это строковый массив.

  1. Измените свой код так:
public class Test{
   public static void main(String[] args){
       System.out.println(args[0]);
   }
}
  1. Теперь скомпилируйте этот код:

$>javac Test.java

  1. Теперь запустите:

$> тест 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