Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода?
Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода? Почему? А если передать примитив?
Отслеживать
задан 27 окт 2021 в 12:05
53 1 1 серебряный знак 8 8 бронзовых знаков
Зачем спрашивать — напишите код и проверьте.
27 окт 2021 в 12:18
1) В зависимости от того какие объекты/примитивы содержатся в массиве и как именно они были «изменены» внутри метода — могут измениться, а могут и остаться прежними. 2) Философский вопрос. 3) Примитив не изменится.
27 окт 2021 в 12:52
@AlexRudenko спасибо за ответ!
27 окт 2021 в 13:55
собственно, одна из практик заключается в том, чтобы не менять значения в функциях, а возвращать новое значение. Но это не всегда применимо, в том числе по соображениям эффективности.
27 окт 2021 в 18:20
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Запомни раз и навсегда! в java всё передаётся по значению (pass by value).
Это значит, что при передаче в метод примитива, у нас создаётся копия, ты можешь крутить и менять её значение внутри метода как угодно, но на само значение это никак ни повлияет.
public class Solution < static void test(int num) < System.out.println(num); // копия num += 1; // пробуем увеличить на 1 System.out.println("после увеличения " + num); >public static void main(String[] args) < int a = 5; test(a); System.out.println(a); >>
5 после увеличения 6 5
А вот со ссылкой посложнее.
На примере массива, массив — это объект, находящийся в куче(она же хип), который может хранить данные, например примитивы.
Передавая массив(объект) в метод, мы получаем копию ссылки, по ссылке мы можем изменить состояние объекта в хипе, но не можем поменять саму ссылку.
public class Solution < static void test(int[] arr, int[] arr2) < arr[0] = 777; // меняем значение 1го элемента в массиве arr = arr2;//указываем ссылкой на другой массив System.out.println(Arrays.toString(arr)); // вывод [0] >public static void main(String[] args) < int[] arr = ; int[] arr2 = ; test(arr, arr2); System.out.println(Arrays.toString(arr)); // вывод [777, 2, 3] > >
Нечто похожее происходит и с ключевым словом final если обозначить примитив словом final мы не можем изменить значение, если пометить ссылочный тип, значение можем менять (кроме immutable объектов), а вот адрес, куда указывает ссылка нет.
Как передать массив в класс java
Для передачи массива в класс Java , вам необходимо создать переменную типа массива в вашем классе и передать массив в качестве аргумента в конструктор или метод класса.
public class MyClass private int[] myArray; public MyClass(int[] myArray) this.myArray = myArray; > public void printArray() for (int i : myArray) System.out.println(i); > > > // пример использования int[] numbers = 1, 2, 3, 4, 5>; MyClass myObject = new MyClass(numbers); myObject.printArray(); // => [1, 2, 3, 4, 5]
- Здесь мы создаем класс MyClass с переменной экземпляра myArray типа int[]
- Затем мы создаем конструктор, который принимает myArray в качестве аргумента и устанавливает его как значение переменной экземпляра myArray .
- Далее мы определяем метод printArray() , который просто выводит элементы массива на консоль.
- Когда мы создаем объект MyClass , мы передаем массив numbers в качестве аргумента конструктора, что приводит к тому, что значения в numbers будут присвоены myArray .
- Затем мы вызываем метод printArray() , который выводит содержимое myArray на консоль.
Как передать массив в метод java
Чтобы передать массив в метод Java , нужно в качестве аргумента указать имя массива, который нужно передать. Например:
public void myMethod(int[] myArray) // some code here >
В данном примере myMethod принимает аргумент myArray типа int[] .
Чтобы вызвать этот метод и передать в него массив, можно сделать так:
int[] myArray = 1, 2, 3, 4, 5>; myMethod(myArray);
В этом примере мы создаем массив myArray и инициализируем его некоторыми значениями, а затем передаем его в метод myMethod вызовом myMethod(myArray)
Передача массива в метод с переменными аргументами в Java
Часто разработчики сталкиваются с задачей передать массив в качестве аргументов методу с переменными аргументами в Java. При этом возникает проблема:
Алексей Кодов
Автор статьи
10 июля 2023 в 15:45
Часто разработчики сталкиваются с задачей передать массив в качестве аргументов методу с переменными аргументами в Java. При этом возникает проблема: массив воспринимается как один объект, а не как набор отдельных элементов.
Приведем пример. Предположим, есть следующий метод:
public void printAll(Object. args) < for (Object arg : args) < System.out.println(arg); >>
И массив объектов, который нужно передать этому методу:
Object[] myArray = new Object[];
Если передать этот массив методу printAll(), то он будет воспринят как один объект, а не как три разных элемента.
printAll(myArray);
На экран выведется информация об одном объекте, а не о трех разных.
Решение проблемы
В Java для решения этой проблемы предусмотрена специальная конструкция. Если перед массивом поставить троеточие, то он будет распакован, и каждый его элемент будет передан в метод как отдельный аргумент.
printAll(myArray. );
Теперь метод printAll() получит три разных аргумента, и на экран будут выведены все три элемента массива.
Но что делать, если в метод нужно передать не только массив, но и другие аргументы? В этом случае можно использовать такую конструкцию:
printAll("Extra argument", myArray. );
«Extra argument» будет передан в метод как первый аргумент, а затем будут переданы все элементы массива.
Таким образом, в Java предусмотрена возможность передачи массива в метод с переменными аргументами так, чтобы каждый элемент массива передавался как отдельный аргумент.