Então o próprio compilador faz com que um tipo primitivo seja passado por valor e um objeto por referência automaticamente, certo?
Mas então, como modificar o valor de um tipo primitivo em um objeto, através de um método?
No exemplo abaixo, o resultado do elemento array[3] é 8, tanto antes quanto depois de usado o método modifyElement() e mesmo mudando o método para retornar um inteiro com [color=blue]return[/color], nada acontece.
import javax.swing.JApplet;
import javax.swing.JTextArea;
import java.awt.Container;
public class ArrayFigura710 extends JApplet
{
public void init()
{
JTextArea outputArea = new JTextArea();
Container container = getContentPane();
container.add( outputArea );
int array[] =
{
1, 2, 3, 4, 5
};
String output = "Efeitos da passagem de um array por referência:\n"
+ "Os valores do array original são:\n";
// acrescenta os elementos do array original ao String output
for ( int counter = 0; counter < array.length; counter++ )
{
output += " " + array[counter];
}
modifyArray( array ); // array passado por referência
output += "\n\nOs valores do array modificado são:\n";
// acrescenta os elementos do array modificado ao String output
for ( int counter = 0; counter < array.length; counter++ )
{
output += " " + array[counter];
}
output += "\n\nEfeitos da passagem por valor dos elementos do array:\n"
+ "a[3] antes de modificar os elementos: " + array[3];
// tentativa de modificar array[3]
modifyElement( array[3] );
output += "\na[3] depois de modificar os elementos: " + array[3]
+ "\n(inalterado, como vc percebe)";
outputArea.setText( output );
} // fim do método init()
// multiplica cada elemento de um array por 2
public void modifyArray( int array2[] )
{
for ( int counter = 0; counter < array2.length; counter++ )
{
array2[counter] *= 2;
}
}
// multiplica o argumento por 2
public void modifyElement( int element )
{
element *= 2;
}
} // fim da classe public
[size=18]Como fazer então?[/size]

