Как передать массив в функцию java
Перейти к содержимому

Как передать массив в функцию java

  • автор:

Как передать массив из метода 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;>>

Как мне передать массив из метода, а потом его очистить ?

  • Вопрос задан более трёх лет назад
  • 1232 просмотра

Комментировать
Решения вопроса 1

leahch

Я мастер на все руки, я козлик Элек Мэк 🙂

Во первых, в java нет понятия «очищения» элементарного массива. Но можно очистить список типа List (Vector, Arralist и т.д.).
Во вторых, не пойму, зачем вообще что-то чистить, в яве прекрасный автоматический сборщик мусора, чем мы все и гордимся.
В третьих — передавать массив так и нужно, просто возвращая его имя в return

Ответ написан более трёх лет назад
Нравится 1 8 комментариев
Caffeinee @Caffeinee Автор вопроса

этот метод выполняется каждые 5 минут. Первый раз я передаю предположим 2 ника. На второй раз у меня появляются 2 других ника для передачи. Первых двух уже не будет в массиве или они останутся и у меня будет массив из 4-х элементов ?

leahch

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

leahch

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 минут процедура повторяется. Но пользователи с предыдущей процедуры мне больше не нужны в массиве.

leahch

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

leahch

Caffeinee, это вам не язык С, где нужно чистить массивы, просто создайте новый массив!
String[] name = new String[] ;
.
name = new String[] ;
.
name = new String[] ;

Денис Загаевский @zagayevskiy Куратор тега Java

Caffeinee, короче непонятно, где ты хранишь этот массив. Это критически важно для правильного ответа, так что давай нормальный код.

Ответы на вопрос 1

В Вашем примере всё, что находится внутри метода get_names, будет удалено после его выполнения (в том числе массив, который Вы там создаёте и возвращаете). И так будет происходить каждый раз, когда Вы вызываете этот метод.
Чтобы постоянно держать массив и работать с ним, Вам нужно где-то объявить этот массив (например, в классе Sql), а у Вас там только метод.
И как уже написали выше, массив — не лучшее решение в данном случае, т.к. он создаётся с определённым размером, и дальше Вы уже не сможете изменить этот размер. Используйте вместо массива List. Тогда можно будет менять размер, наполнять и «очищать» содержимое.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

java

  • Java
  • +4 ещё

Как избавляться от ненужных записей в бд?

  • 1 подписчик
  • 5 часов назад
  • 56 просмотров

Как передать массив в метод 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 объектов), а вот адрес, куда указывает ссылка нет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *