Porque a ordem de um Array muda, se o valor de uma variável não muda ao chamar um método?

Java

27/06/2017

Não entendo porque é possível mudar um Array, apenas invocando um método sem retorno, se o valor de uma variável não muda ao invocar um método sem retorno.

Por exemplo, esse código:

// Código abaixo

public class Exemplo
{
public static void main(String[] args)
{
int x = 10;
mudarValor(x);
System.out.print(x);

int[] Array = {4, 7, 5, 2, 9, 8, 1, 3, 6}; // Criei um array com os números desordenados.
arrumarArray(Array); // Método para arrumar os números de um Array em ordem crescente.
printArray(Array); // Método para imprimir um Array.
}

public static void arrumarArray (int[] A)
{
for (int i = 0; i < A.length; i++)
{
for (int j = 0; j < A.length-1; j++)
{
if (A[j] > A[j+1])
{
int troca = A[j];
A[j] = A[j+1];
A[j+1] = troca;
}
}
}
} // fim do arrumarArray

public static void mudarValor (int x)
{
x = 20;
}

public static void printArray (int[] A)
{
System.out.println();
for (int i : A)
{
System.out.print(i + " ");
}
} // fim do printArray
}

/* Esse código vai imprimir duas linhas:
10
1 2 3 4 5 6 7 8 9
*/

// Fim do código.

Eu sei que o valor da variável não mudou, porque são escopos diferentes, e eu não mudei o valor do x no main, e sim no método.
Porém, seguindo esse mesmo raciocínio, no caso do array, ele não deveria alterar o do main, porém ele alterou. Logo, se eu precisasse usar o Array desordenado eu não conseguiria.

Espero que ficou claro minha questão,
Obrigado :)
Lucas

Lucas

Curtidas 0

Melhor post

Aline Bianchini

Aline Bianchini

27/06/2017

Oi Lucas, tudo bem?

Isso aconteceu porque tipos primitivos possuem passagem por valor, e Arrays possuem valores por referência, ou seja, quando há passagem por valor, é passada uma cópia do valor da variável, na passagem por referência, é passada uma referência à própria variável ( altera direto no endereço de memória).

Você pode forçar a passagem por referência, ou então instanciar um novo array (tipo um auxiliar) e atribuir o valor do array desordenado.
GOSTEI 4
POSTAR