Arraycopy

Caros, olá,
estou testando o System.arraycopy, porém depois de já ter criado um novo array maior e copiado o valores do array antigo para o novo, quando peço para imprimir o campo “salario” percorrendo o array o valor de “salario é o mesmo pra todos” não entendi por que.

class Descobrir{
String nome = "r";
String departamento = "atendimento";
double salario = 2000;
Descobrir[] h;
Descobrir[] h2 = new Descobrir[10];
int a = 1;

	void adiciona(Descobrir d){
	for (int i = 0; i<5; i++){
	h[i]=d;
	h[i].salario=i*2;
}//fimFor
	for(int x=0;x<h.length;x++){
	if(h[x]==null){
	a=0;
}//fimIf
}//fimFor2
	if(a == 1){
	System.arraycopy(h,0,h2,0,h.length);
}//FimIf2
	for(int z=5;z<h2.length;z++){
	h2[z]=d;
}//FimFor3
	for(int y=0;y<h2.length;y++){
	System.out.println(h2[y].salario);
}//fimFor4
}//FimAdd

}//fim

Aqui está o main.

class TestaDescobrir{
public static void main (String [] args){
Descobrir descobrir = new Descobrir();
descobrir.h = new Descobrir[5];
descobrir.adiciona(new Descobrir());
}//fimMain
}//fim

Desde já grato.

O problema não está no System.arrayCopy.

Você está criando um array de 5 objetos no main, mas só chama o método adiciona passando um único objeto.
O for do método adiciona, coloca o mesmo objeto em 5 posições diferentes, alterando o seu salário.
Como você tem um objeto só, o salário será impresso 5 vezes.

Outra coisa. Arruma a indentação do seu código. Té bem fácil de se perder aí.

Já corrigi, fiz referencia a um objeto novo para cada ciclo do for, deu certo. :smiley:
Quanto a indentação ruim, peço desculpas, rsrss.
valeu mesmo: ViniGodoy.