Передача параметров в метод Java

199
13 января 2018, 01:02
public class MainTest{
    public static void main(String[] args) {
        //new MyClass();
        int mas[]=new int[]{1,2,3,4,5};
        test(mas);
        for (int i = 0; i < mas.length; i++) {
            System.out.println("Main  "+mas[i]);
        }
    }
    public static void test(int mas[]){
        testA(mas);
        for (int i = 0; i < mas.length; i++) {
            System.out.println("test  "+mas[i]);
        }
    }
    public static void testA(int mas[]){
        mas[0]=100;
        mas[1]=100;
        mas[2]=100;
        for (int i = 0; i < mas.length; i++) {
            System.out.println("testA  "+mas[i]);
        }
    }
}

Возможно я что - то не так понимаю. Но по моей логике переменная переданная в метод и дальнейшие модификации с ней должны остаться в это методе, и исчезнуть вместе с методом. Но в итоге я вижу в main измененный массив mas.

Почему так происходит. Потому что в таком случае пропадает надобность в return....В Java давно, а тут такое. Видать что - то серьезное я забыл....

testA  100
testA  100
testA  100
testA  4
testA  5
test  100
test  100
test  100
test  4
test  5
Main  100
Main  100
Main  100
Main  4
Main  5
Answer 1

@AlexChermenin замудрено объяснили. Объекты передаются по ссылке, примитивы по значению. Массивы примитивов - это объекты, поэтому передаются также по ссылке.

Обновлено: под передачей по ссылке я имею ввиду, что объект таки передается по значению. Но в значении содержится ссылка на объект, а не копия объекта.

Примитивы (https://ideone.com/c9agyH):

int number = 0;
void update(int num) {
    num++;
    System.out.println(num); // 1
}
update(number);
System.out.println(number); // 0

Массив примитивов (https://ideone.com/SrzjUd):

int[] numbers = new int[]{1,2,3,4,5};
void update(int[] nums) {
    for(int i=0; i < nums.length; i++) {
        nums[i] = 5-i;
    }
}
update(numbers);
/** 
 * Ага, а тут кстати вызывается toString(), чего нет у примитивов
 */
System.out.println(numbers); // {5,4,3,2,1}
READ ALSO
Не работает jquery внутри ballon

Не работает jquery внутри ballon

создаю метку с балуном, в balloonContentBody вписываю html c классом 'set-moderated' для срабатывания события jquery, но оно не срабатываетЗнаю, что есть решение...

208