Вы можете сами проверить, что происходит именно путем компиляции небольшую тестовую программу, а затем декомпилировать его с javap
(инструмент в комплекте с JDK):
public class Example {
public static void main(String[] args) {
System.out.format("%10s",3);
}
}
Компиляция это с javac Example.java
, а затем декомпилировать его с javap -c Example
:
Compiled from "Example.java"
public class Example {
public Example();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String %10s
5: iconst_1
6: anewarray #4 // class java/lang/Object
9: dup
10: iconst_0
11: iconst_3
12: invokestatic #5 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
15: aastore
16: invokevirtual #6 // Method java/io/PrintStream.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
19: pop
20: return
}
Вы видите, что это делает:
- Это создает
Object[]
, в котором первая строка "%10s"
хранится (строки 3-10)
- Он вызывает
Integer.valueOf()
в поле на значение 3
(строки 11, 12)
- Объект
Integer
хранится в массиве (строка 15)
- Тогда метод
format(Object[])
называется (строка 16)
Примечание: массив используется, потому что метод format
представляет собой метод переменных аргументов; varargs реализуются с использованием массивов.
Приветствия очень благодарны. – Rollerball