#java #arrays
#java #массивы
Вопрос:
Когда я запускаю этот код в командной строке с инструкцией :
java Test A
вывод
a
b
c
Разве это не должно было привести к ошибке, поскольку размерность аргументов равна 1, тогда как размерность x равна 3 (args = x).
class Test
{
public static void main(String args[])
{
String[] x={"a","b","c"};
args=x;
for(String i: x)
{
System.out.println(i);
}
}
}
Комментарии:
1. Ваш массив имеет длину 3, размерность по-прежнему равна 1.
2. Расширенный цикл for-each использует итератор для большинства реализаций. И для этого не требуется никаких знаний об указателях или размере, поэтому компилятор с удовольствием запускает for-each для любого массива / iterable, не беспокоясь о том, что в нем. Очевидным исключением является то, что вы не можете
for (Object o : null)
или что-то глупое
Ответ №1:
ну, переменная array в java — это всего лишь ссылка, поэтому, если вы дадите ей другую ссылку на строковый массив, она примет ее, поэтому диапазон значений, которые принимает переменная array (args), — это ссылки на строковые массивы в памяти, это все равно, что изменить значение целого числа с 1до 3, это нормально, потому что они оба допустимы и находятся в диапазоне, который принимает целое число.
Комментарии:
1. Спрашивающий не понимает разницы между РАЗМЕРОМ массива и его ДЛИНОЙ. Ваш ответ не касается этого.
Ответ №2:
Это не приведет к ошибке, потому что ваш объект не является окончательным, и вы не меняете объект массива.
здесь
double[] data = new double[5]{2, 4, 5, 6, 8} // data can change but the instance of the class cant change
double[] data = new double[7] // here you are changing the data but not the object i.e the created instance of the object does not change but the instance the data(the variable) is holding changes
Надеюсь, вы получили свой ответ
Комментарии:
1. Спрашивающий не понимает разницы между РАЗМЕРОМ массива и его ДЛИНОЙ. Ваш ответ не касается этого.
2. Я думаю, что он просто перепутал размер и длину массива. Я думаю, остальная часть ответа по-прежнему актуальна.