import java.util.Arrays;

public class Amigo {
    public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 3, 4, 5},
                {5, 4, 3, 2, 1}
        };
        System.out.println(Arrays.deepToString(matrix));

        int[] tmp = matrix[0];  // Присвоили массиву tmp ссылку на массив matrix[0]
        System.out.println(Arrays.toString(tmp));
        matrix[0] = matrix[1];  // Присвоили ссылке matrix[0] ссылку matrix[1]
        System.out.println(Arrays.toString(tmp));
        System.out.println(Arrays.deepToString(matrix));
        matrix[1] = tmp; // По сути, присвоили ссылку tmp(== matrix[0]) ссылке matrix[1]
        System.out.println(Arrays.deepToString(matrix));

        matrix[1][2] = 222;
        System.out.println(Arrays.toString(tmp));
        System.out.println(Arrays.deepToString(matrix));
        tmp[3] = 144;
        System.out.println(Arrays.toString(tmp));
        System.out.println(Arrays.deepToString(matrix));
    }
}
Доброй ночи xD Читая лекции наткнулся на пример, где объяснялось, как в массиве двумерном поменять строки местами, но как-то в голову не лезет, почему так выходит, ведь при замене элементов, если мы на них ссылаемся в другом массиве, элементы заменяются и в самом первом. Выше я расписал пример из лекции + добавил от себя, чтоб было понятно, что я имею ввиду. Был создан двумерный массив с 5 значениями в каждой строке. Далее, был создан еще один массив tmp, которому присвоили ссылку(значения?) элемента matrix[0]. Все хорошо, никаких проблем не вижу. Однако дальше, элементу matrix[0], в котором находится ссылка на массив значений {12345}, был присвоен элемент matrix[1], в котором находится ссылка на массив {54321}. Вот тут и начинается загвоздка, я не понимаю, почему при присвоении matix[1] к matrix[0], наш tmp так и остался со ссылкой на массив значений который раньше был matrix[0] и не поменялся? Если посмотреть на вывод значений на экран, в самой matrix значения поменялись, все логично, мы изменили элемент, было [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1]] стало [[5, 4, 3, 2, 1], [5, 4, 3, 2, 1]] однако, tmp как был [1, 2, 3, 4, 5] так им и остался, но ведь не должен, теперь по этой ссылке находится иные значения. Мы не создавали новый отдельный массив, например через существующие методы с заносом туда данных из matrix, это все тот же tmp ссылающийся на элемент matrix[0], но почему-то не принимающий новые значения, а оставляющий старые [[1, 2, 3, 4, 5]. Далее мы присваиваем matrix[1] = tmp и вуаля, мы перевернули строку. Затем, для примера, я написал еще код с изменением элементов внутри массива matrix[1][2] и вывел результаты, значения в tmp и строке matrix[1] изменились, тоже самое для tmp, и они снова изменились и там и там, что логично и правильно. Но когда мы делаем тоже самое для ссылок выше, tpm при изменении matrix[0] = matrix[1], все равно остался со старыми значениями matrix[0]. Вывод - ссылка как элемент, которая была присвоена другому массиву, в этом другом массиве не изменяется в случае когда мы изменяем элемент на другую ссылку в изначальном массиве? В обе стороны меняются только значения элементров внутри обычного массива? Спасибо. Дай Диего здровья тому, кто ответит, а то получилось какое-то масло масляное(3:33 на часах), но надеюсь, мой ход мыслей будет понятен 🙃