Обратный массив со статическим методом VS static void?

Я нашел несколько потоков, как перевернуть массив. Однако я не понимаю, почему нельзя использовать один и тот же код как для статического метода, так и для метода void.

Может ли кто-нибудь объяснить разницу в следующих примерах?

Для статического метода мы можем написать:

public static double[] reverse (double[] a) 
{
        int n = a.length;
        for (int i = 0; i < n/2; i++) 
        {
            double temp = a[i];
            a[i] = a[n-(i+1)];
            a[n-(i+1)] = temp;
        }
        return a;
}

Но для статической пустоты имеем:

public static void reverse (double[] a) 
{
    for (int i = 0, j = a.length-1; i < j; i++, j--)
    {
        double temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

В первом случае вы возвращаете сам массив, во втором случае вы просто изменяете существующий массив и ничего не возвращаете.

Akceptor 05.02.2019 15:40

Это всего лишь два разных способа обращения массива, и метод non-void возвращает массив.

Steve Smith 05.02.2019 15:41

@Akceptor Оба метода изменяют существующий массив.

Steve Smith 05.02.2019 15:46

@SteveSmith да, но void не возвращает его.

Akceptor 05.02.2019 15:48

Возможный дубликат Пустота и возврат в Java — когда использовать

Akceptor 05.02.2019 15:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
485
1

Ответы 1

Прежде всего, оба метода в вашем случае являются статическими. У них просто другой тип возврата

Для случая static void reverse (double[] a) вы делаете так:

double[] arr = //some array
reverse(arr); //at this point arr is reversed so that you can use it 
reversedArr = arr; //or assign to different variable

На самом деле все в порядке, если вам нужно перевернуть какой-то внутренний массив, но мне все равно это не нравится, потому что не слишком очевидно, что массив изменен. Я не думаю, что это хорошо, чтобы такой метод был публичным...

static double[] reverse (double[] a) хорош для того, чтобы быть частью некоторого служебного класса, т.е.

double[] arr = //some array
reversedArr = ArrayUtils.reverse(arr); // now you can reuse method and you actually see that you changed the array

Но вы следует изменить метод, чтобы не изменять исходный массив, потому что у вас могут возникнуть проблемы (вызов служебного метода не должен изменять начальное значение)

Другие вопросы по теме