Почему массив изменяется

Доброго времени суток!

public class Solution {
public static void main(String[] args) {
    int[] data = {10,1,5,124,64,12};
    System.out.println("Массив до вызова метода print: ");
    for(int ints : data) {
        System.out.print(ints + " ");
    }
    print(data);
    System.out.println();
    System.out.println("Массив после вызова метода print: ");
    for(int ints : data){
        System.out.print(ints + " ");
    }
}
public static void print(int[] data){
    int[] arr = data;
    boolean isTrue = false;
    while(!isTrue){
        isTrue = true;
        for(int i = 1; i < arr.length; i++){
            if(arr[i-1]>arr[i]){
                int temp = arr[i-1];
                arr[i-1] = arr[i];
                arr[i] = temp;
                isTrue = false;
            }
        }
    }
}

} Вывод: Массив до вызова метода print: 10 1 5 124 64 12 Массив после вызова метода print: 1 5 10 12 64 124

Внимание вопрос: почему массив data изменился? Я же просто вызвал метод print, в него передал мой массив. В самом методе print создал новый массив arr и работаю уже непосредственно с arr! А по итогу массив data изменился...


Ответы (2 шт):

Автор решения: Aziz Umarov

Массивы это ссылочный тип данных. Существует несколько способов клонирование массивов.

int[] array = {23, 43, 55, 12};
int newLength = array.length;
 
int[] copiedArray = Arrays.copyOf(array, newLength);


int[] array = {23, 43, 55};
int[] copiedArray = new int[3];
 
System.arraycopy(array, 0, copiedArray, 0, 3);


int[] array = {23, 43, 55, 12};
 
int[] copiedArray = array.clone();
→ Ссылка
Автор решения: Danny

Метод print меняет массив, потому что он передаётся по ссылке, а не копируется. Массивы в Java передаются по ссылке.

→ Ссылка