Passar Referência de Arrays?

gente, estou com uma dúvida:

eu declaro uma array bidimensional:

int[][] status = new int[1][1];

E chamo uma função:

public void leMapa(int[][] status) 

Que apenas redimensiona o array:

status = new int[width][height];

E coloca valores nele.

Na hora que volto, descubro que o array não é passado como referencia e sim como valor. Ou seja, não consigo devolver valores nele.

Por que isso? Um Array não é um objeto? Um objeto não é passado como referencia sempre? Como faço para popular dois arrays com uma só função?

Obrigado

cara seguinte… c vc faz…

status = new int[width][height];

vc está jogando fora a array q estava dentro do status…
a antiga array é jogada fora… e é criada uma nova array ai…

ou seja… c vc faz… isso daki

... int[][] minhaArray = new minhaArray[1][1]; leMapa(minhaArray);

c dentro de leMapa… vc de alguma forma faz… isso

public void leMapa(int[][] status) { ... status = new int[width][height]; ... }
ele irá tirar a array minhaArray de dentro de status… e vai por a nova array int[width][height]; … isso não faz com q … minhaArray seja igual a int[width][height];

espero q vc tenha entendido

Vc está confundindo a referência para o array bidimensional, com o conteúdo.

Vamos lá…

Vc declarou um array de dimensões 1 por 1.

int[][] status = new int[1][1];

Onde o atributo status contém o endereço de memória para este array.

Na função,

public void leMapa(int[][] status)  {
status = new int[width][height];

vc está passando uma referência do array bidimensional. Quando vc instância um novo array, com outras dimensões no atributo status, vc está alterando a referência local e não o atributo status que tem scopo de classe.

Blz?

Tem um artigo no Portal sobre a sua dúvida (muito bom):

http://www.portaljava.com.br/home/modules.php?name=Sections&op=viewarticle&artid=4

:slight_smile:

Espero ter ajudado…