Как передать массив в метод 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 , вам необходимо создать переменную типа массива в вашем классе и передать массив в качестве аргумента в конструктор или метод класса.
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 на консоль.
Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода?
Что будет если передать массив в метод, который изменит его значения, изменятся ли они вне метода? Почему? А если передать примитив?
Отслеживать
задан 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, а зачем очистить его?
Я беру с базы данных сайта ники пользователей с определенным значением и заменяю значение, чтобы больше не брать эти-же ники. Вношу их в массив и передаю его через return основному классу. А после передачи мне нужно очистить массив, чтобы в следующий раз снова не передать эти-же ники. Для теста написал вот это, но он просто выдает список из null.
public class sql < public static String[] get_names() < String[] name = new String[] ; String[] name_return = name; for(int i =0; i < name.length; i++) < name[i] = null; >return name_return;>>
Как мне передать массив из метода, а потом его очистить ?
- Вопрос задан более трёх лет назад
- 1231 просмотр
Комментировать
Решения вопроса 1

Я мастер на все руки, я козлик Элек Мэк 🙂
Во первых, в java нет понятия «очищения» элементарного массива. Но можно очистить список типа List (Vector, Arralist и т.д.).
Во вторых, не пойму, зачем вообще что-то чистить, в яве прекрасный автоматический сборщик мусора, чем мы все и гордимся.
В третьих — передавать массив так и нужно, просто возвращая его имя в return
Ответ написан более трёх лет назад
Нравится 1 8 комментариев
Caffeinee @Caffeinee Автор вопроса
этот метод выполняется каждые 5 минут. Первый раз я передаю предположим 2 ника. На второй раз у меня появляются 2 других ника для передачи. Первых двух уже не будет в массиве или они останутся и у меня будет массив из 4-х элементов ?

Caffeinee, Вам нужно получать разницу в массивах? Один массив достаете из базы, второй в памяти постоянно будет?

Caffeinee, Да и ошибка у вас в коде! Так массивы присваивать нельзя. Вы второй переменной просто присвоили ССЫЛКУ на массив, а массив у вас как был один, так и остался!
String[] name = new String[] ; List name_return = new ArrayList(); for(int i =0; i < name.length; i++) < if(name[i].startsWith("caf")) < name_return.append(name[i]); >> // здесь хитрым способом конвертируем наш список в массив // нахрена, правда, не знаю, чо бы просто список не вернуть? return name_return.stream().toArray(String[]::new); // вот так правильней // return name_return;
Caffeinee @Caffeinee Автор вопроса
Алексей Черемисин, Мне нужен 1 массив. Я заполняю его переменными с базы данных и передаю в главный класс, где дальше с ним играюсь. Но мне нужно, чтобы когда я снова выполнял этот метод, массив был пустой, и в него попадали новые переменные из базы данных, старых там быть уже не должно.
Caffeinee @Caffeinee Автор вопроса
Алексей Черемисин, Условно в таблице базы есть колонка. Некий php скрипт ставит в ней значение с 0 на 1. Затем я беру всех пользователей со значением 1, меняю его на 2 и записываю их себе в массив. Затем через 5 минут процедура повторяется. Но пользователи с предыдущей процедуры мне больше не нужны в массиве.

Caffeinee, не используйте массивы — используйте коллекции! массив — неизменяемый, в некотором роде.

Caffeinee, это вам не язык С, где нужно чистить массивы, просто создайте новый массив!
String[] name = new String[] ;
.
name = new String[] ;
.
name = new String[] ;
Денис Загаевский @zagayevskiy Куратор тега Java
Caffeinee, короче непонятно, где ты хранишь этот массив. Это критически важно для правильного ответа, так что давай нормальный код.
Ответы на вопрос 1
В Вашем примере всё, что находится внутри метода get_names, будет удалено после его выполнения (в том числе массив, который Вы там создаёте и возвращаете). И так будет происходить каждый раз, когда Вы вызываете этот метод.
Чтобы постоянно держать массив и работать с ним, Вам нужно где-то объявить этот массив (например, в классе Sql), а у Вас там только метод.
И как уже написали выше, массив — не лучшее решение в данном случае, т.к. он создаётся с определённым размером, и дальше Вы уже не сможете изменить этот размер. Используйте вместо массива List. Тогда можно будет менять размер, наполнять и «очищать» содержимое.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Java
- +1 ещё
Как интегрировать Java в 1C?
- 2 подписчика
- 10 часов назад
- 164 просмотра