Как получить результат подкачки после завершения метода в java?

Я реализую пузырьковую сортировку в java, когда я пишу код таким образом, сортировка не происходит.

public int [] sort(int [] array) {
        for(int counter1 = 0; counter1 < array.length; counter1 ++) {
            for(int counter2 = counter1; counter2 < array.length; counter2 ++) {
                if(array[counter1] > array[counter2]) service.swap(array[counter1], array[counter2]);           
            }
        }
        return array;
    }

это метод замены

public class service {
    public static void swap(int value1, int value2) {
        value1 = value1 ^ value2;
        value2 = value1 ^ value2;
        value1 = value1 ^ value2;
    }
}

но когда я пишу это так, это работает

public int [] sort(int [] array) {
        for(int counter1 = 0; counter1 < array.length; counter1 ++) {
            for(int counter2 = counter1; counter2 < array.length; counter2 ++) {
                if(array[counter1] > array[counter2]) {
                    array[counter1] = array[counter1] ^ array[counter2];
                    array[counter2] = array[counter1] ^ array[counter2];
                    array[counter1] = array[counter1] ^ array[counter2];
                }
            }
        }
        return array;
    }

Я знаю, что после завершения метода память для него в стеке удаляется, по крайней мере, это то, что я знаю из языка c. В c я использовал указатели, но в java указателей нет. есть ли способ реализовать своп внутри метода и сохранить обновленные изменения?

Чтобы ваша функция работала, вы можете передать массив в качестве ссылки, например:

Robert Harvey 10.04.2022 02:16
void swap(int[] array, int index1, int index2)
Robert Harvey 10.04.2022 02:17
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
2
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Аргументы функции находятся только в локальной области действия функции. Это значит, что

value1 = value1 ^ value2;

влияет только на переменную value1, которая является локальной для вызова функции. Это связано с тем, что int является примитивным типом в Java, а это означает, что переменная этого типа хранит только свое значение.

Иначе обстоит дело с непримитивными типами, где переменная хранит ссылку (что-то вроде указателя) на объект. Вызов функции с непримитивными типами (например, Integer) будет означать, что фактические объекты за ссылкой изменены, что позволит использовать внешнюю функцию, подобную вашей. Тем не менее, в этом случае вы должны предпочесть использование примитивов и замену на месте.

Возможно, это поможет объяснить непримитивные типы: https://www.baeldung.com/java-pass-by-value-or-pass-by-reference

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