因为数组在JAVA 中是作为对象的。 如果讲整个数组做参数,当然是引用传递,如果传递数组中的一个元素,那还要看 这个元素的类型,, 如果 是对象的引用,那么仍然是引用传递你现在的数组里放的是int 所以 传递其中一个元素,当然是值传递

解决方案 »

  1.   

    我认为可以将所有的传递都看成是值传递。即拷贝实参的副本,将副本传递。
    引用类型可以看作是一种常量指针。即引用本身的地址值不变(java中没有地址概念,这只是借c++来作个比方)。在参数传递的时候,将引用本身做一个拷贝,而改引用所指向的对象是不变的。
    如:
    //MyTest.java
    public class MyTest {
    public int value;
    public static void main(String[] args) {
    MyTest test = new MyTest();
    test.fun();
    }
    public void fun() {
    MyTest t1 = new MyTest();
    this.fun1(t1);
    System.out.println(t1.value);
    this.fun2(t1);
    System.out.println(t1.value);
    }
    public void fun1(MyTest t2) {
    t2.value = 2;
    }
    public void fun2(MyTest t3) {
    t3 = new MyTest();
    t3.value = 5;
    }
    }
    结果是
    2
    2
    t1, t2, t3 都是引用,传参的时候t1被分别复制了一份传给了t2和t3.t1,t2,t3是三个不同的引用但他们都引用同一个对象(即,这三个指针本身不同,但却指向同一地址)。
    t3 = new MyTest();后t3又指向新的对象,而对t1所指向的对象不再产生影响。
      

  2.   

    to:ilzzy(沧海微尘)
    1.你说道都可以看成值传递,那能对我那个程序解释一下为什么对整个数组操作的时候会改变呢?2.你的程序中
       this.fun1(t1);执行后由于fun1的定义使t1的值变为了2;   public void fun2(MyTest t3) {
    t3 = new MyTest();//这个是不是多余呢?MyTest t3已经创建了啊
    t3.value = 5;
    }
      对于fun2,在对t1进行调用时,对t1有什么影响呢?到底发生了什么啊