2016-10-18 3 views
0

У меня есть вопрос относительно адреса массивов. Позволяет сказать, что у нас есть эта часть кода:Java, возвращающий адрес массива исходного массива

main(){ 
int[] numbers = {1, 2, 3}; 
method(numbers); 
} 

method(int[] methodNumbers){ 
methodNumbers= new int[methodNumbers.length]; 
return methodNumbers; 
} 

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

Так что я знаю, что есть основная рама стека, кадр стека метода и куча. В нашем основном хранится int[] numbers. Он указывает на адрес в куче, где хранятся индексы. Мы передаем int[] numbers в параметр methodNumbers, поэтому теперь они указывают на то же место в куче. Внутри нашего метода мы объявляем новый int для нашего methodNumbers, поэтому теперь массив int[] methodNumbers указывает на новое местоположение в куче. Но в итоге мы возвращаем methodNumber.

Мой вопрос: где находится int[] numbersArray, указывающий на конец. Указывает ли оно на то же место или указывает на то же место, что и methodNumbers?

+0

Там нет ИНТ [] numbersArray в коде вы предоставили – Coder

+0

'numbers' указывает на тот же объект, как и до вызова метода. –

ответ

2

Java является pass-by-value языка, так что вы не можете изменить значение (= ссылка (!) в случае массивов) переменные, передаваемые в качестве параметров (но вы можете изменить то, что они относятся к).

main(){ 
    int[] numbers = {1, 2, 3}; 
    method(numbers); //returns pointer to new array created in the method; it's unused 

    //here numbers is unchanged, because changing parameter variables 
    //in method doesn't change variables outside the method 
} 

method(int[] methodNumbers){ 
    methodNumbers= new int[methodNumbers.length]; 
    //methodNumbers is a variable local to method, 
    //you can change it without interfering with other 
    //variables outside the method; but if you change 
    //value it referring to (for example via methodNumbers[0] = -1) 
    //you will change array you created before method 

    return methodNumbers; 
} 
Смежные вопросы