import java.awt.Container;
import javax.swing.*;
public class MyJava710 extends JApplet 
{
public void init()
{
JTextArea outputArea = new JTextArea();
Container container = getContentPane();
container.add( outputArea );
int array [] = {1,2,3,4,5};
String output = " 引用传递的结果:" + "\n" + "原始数组为:" + "\n";
for ( int i = 0; i < array.length;i++ )
output += " " + array[i];
modifyArray( array );
output += "\n" + "引用传递后的结果为:" + "\n";
for ( int i = 0; i < array.length;i++ )
output += " "+ array[i];
output += "\n" + "值传递的结果 : " + "\n" + "传递前的值是:" + "\n" + array[3];
modifyElement(  array[3]);
output += "\n" + "传递后的值是:"+ "\n" + array[3];
outputArea.setText( output );
}
public void modifyArray( int array1[])
{
for ( int j = 0; j < array1.length; j++ )
array1[ j ] *=2;
}
public void modifyElement( int element )
{
element *= 2;
}
}
这个程序运行的结果是: 引用传递的结果:
原始数组为:
 1 2 3 4 5
引用传递后的结果为:
 2 4 6 8 10
值传递的结果 : 
传递前的值是:
8
传递后的值是:
8请问一下值传递前和传递后array[3]的值为什么都是8,这句modifyElement(  array[3])不是已经把array[3]的值变了吗??怎么结果还是8

解决方案 »

  1.   

    modifyElement(int element),传的是array[3]的值,传进去后管它在方法里面怎么折腾,对原来的array[3]来说都是无用功。modifyArray(int array1[]),传的是array1数组的第一个元素的地址值,此时会有2个指针指向array1数组,此时你在方法里对array1进行操作会是真实地改变array1数组。模拟画一下内存就明白了。
      

  2.   

    [b]modifyElement(int element),传的是array[3]的值,传进去后管它在方法里面怎么折腾,对原来的array[3]来说都是无用功。 [/b]
    还是不怎么明白这句,那不明明改变了array[3]的值吗,怎么会没用呢??
      

  3.   

    java传递采用的是值传递,如果传递参数是非引用类型则传递的是值拷贝,如果传递参数是引用类型则传递的是引用引用的拷贝