Eu estou com um problema meio estranho em java. Logo abaixo dei um exemplo do que está ocorrendo com meus programas:
package test;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner leitor=new Scanner(System.in);
int vet[]=new int[2];
vet[0]=4;
vet[1]=6;
int vet2[];
vet2=vet;
vet2[0]=1;
vet2[1]=2;
System.out.println(vet[0]+" "+vet[1]);
}
}
Saída:
1 2
O System.out.println(vet[0]+" "+vet[1]) não deveria retornar 4 e 6, em vez de 1 e 2, já que não há nenhum comando que faça o vet mudar seus valores? Eu notei que 1 e o 2 são valores de vet2 que foram mudados. Alguém poderia me dizer o que está acontecendo e como resolver isso? Nos programas em questão, eu preciso que um vetor pegue os valores de outro vetor, de uma forma rápida, como se fosse vet2=vet, então gostaria de uma solução que não tirasse isso.
Você declarou uma variável inteira do tipo array que recebe o endereço de vet. Logo, vet2 está ‘trabalhando’ sobre vet, já que aponta para o mesmo local na memória. Assim, ao indicar:
na verdade está alterando os valores de vet para 1 e 2 respectivamente nos índices 0 e 1. Veja:
Os variáveis fazem referência à mesma memória, no caso: [I@15db9742. O resultado foi produzido pelo seguinte código: