class Test {
public static void main(String[] args) {
int i = 4;
int ia[][][] = new int[i][i=3][i];
System.out.println(ia.length + ", " + ia[0].length + ia[0][0].length);
}
}
Я бы подумал, что 3, 4, 3 были бы напечатаны вместо правильного ответа: «4, 3, 3». Переменная ia имеет 3 массива, так почему ia.length не 3?




Длина равна 4, потому что вы инициализируете i до 4 в строке перед инициализацией массива.
Итак, заменяя i фактическими значениями, которые вы делаете
int ia[][][] = new int[4][3][3];
Кроме того, я бы подумал, что присвоение i нового значения одновременно с инициализацией массива будет плохой практикой (удобочитаемость).
Более того, ia не «имеет 3 массива», это трехмерный массив.
Ну нет, ia [0] содержит int [3] [3] в вашем примере, поэтому длина 3
i имеет длину 4. Каждый из этих четырех элементов - это int[3][3] - это массив длиной 3, а каждый из те является массивом длины 3. Каждый из i[0], i[1], i[2], and i[3] имеет длину 3. Спускаясь на один уровень вниз, каждый из их элементов ( например, i[2][0]) имеет длину 3.
Согласно 15.10.2. Оценка во время выполнения выражений создания массива
First, the dimension expressions are evaluated, left-to-right. If any of the expression evaluations completes abruptly, the expressions to the right of it are not evaluated.
Это простой случай без исключений, применяется только часть правила слева направо. Итак, чтобы оценить new int[i][i=3][i], необходимо выполнить следующие шаги:
i (дает 4)i=3 (установив i на 3, что даст 3)i (результат 3, поскольку на предыдущем шаге было установлено значение 3)Следовательно, размеры, с которыми создается массив, равны 4, 3, 3.
Спасибо, я понял это, но я все еще не понимаю, почему ia [0] .length печатает 3, а не 4. Пожалуйста, объясните мне это.
@ShahidSarwar 4 - это длина самого ia. Здесь всего одна 4, все остальное - 3.
но ia [0] должно быть 4, верно? он печатает 3. не могли бы вы объяснить почему?