为什么Java方法不起作用?

时间:2014-11-11 14:41:00

标签: java

在Java中为什么传入一个参数,一个方法中的参数得到了正确的改变,但是在参数的main方法中调用这个方法之后却没有改变?

我的代码:

public void RSort123(Student[] stu) {
    int k = 0;
    Student[] stu1 = new Student[this.len];
    for (int i = 0; i < this.len; i++)
        stu1[i] = new Student();
    Clear(array);
    for (int i = 0; i <= 100; i++) {
        for (int j = 0; j < this.len; j++) {
            if (stu[j].english == i) {
                array[i][k++] = j;

            }
        }
        k = 0;
    }// 分配

    for (int i = 100, j = 0; i >= 0; i--) {
        for (int l = 0; array[i][l] != -1; l++) {
            stu1[j] = stu[array[i][l]];
            j++;
        }
    }// 收集

    stu = stu1;
    System.out.println("---------------stu----------------");
    for (int p = 0; p < len; p++)
        stu[p].display();
    System.out.println("---------------stu1---------------");
    for (int p = 0; p < len; p++)
        stu1[p].display();
    System.out.println("---------------end----------------");
}

代码部分主要代码

//Call the method.  But not work, But in RSort123() method stu changed. Why?
rs.RSort123(stu);            
System.out.println("姓名\t语文\t数学\t英语\t总分");
for(int i=0; i<length; i++){
    stu[i].display();
}

2 个答案:

答案 0 :(得分:1)

Java按值传递参数,因此虽然您可以对 stu中的进行更改,但您无法替换stu本身。

stu视为一个局部变量,它引用与main中stu相同的(本例中为jn),因此更改方法中的stu不会影响main中的stu(但更改 它们共享的数组中的内容将显示在两者中)。

答案 1 :(得分:1)

故障是您修改了另一个对象stu1,然后将stu的引用更改为stu1。这将在您的方法中起作用,但不会影响主方法中stu的引用。它仍然会引用你的旧stu对象。所以你必须这样做:

public Student[] RSort123(Student[] stu){

        int k = 0;
        Student[] stu1 = new Student[this.len];
        for(int i=0; i<this.len; i++)
            stu1[i] = new Student();
        Clear(array);
        for(int i=0; i<=100; i++){
            for(int j=0; j<this.len; j++){
                if(stu[j].english == i){
                    array[i][k++] = j;

                }
            }
            k = 0;
        }//分配


        for(int i=100,j=0; i>=0; i--){
            for(int l=0; array[i][l]!=-1; l++){
                stu1[j] = stu[array[i][l]];
                j++;
            }
        }//收集

        stu = stu1;
        System.out.println("---------------stu----------------");
        for(int p=0; p<len; p++)
            stu[p].display();
        System.out.println("---------------stu1---------------");
        for(int p=0; p<len; p++)
            stu1[p].display();
        System.out.println("---------------end----------------");
        return stu;
    }

并在你的主要:

stu=rs.RSort123(stu);            **//Call the method.  But not work, But in RSort123()method stu changed.  Why?**
System.out.println("姓名\t语文\t数学\t英语\t总分");
for(int i=0; i<length; i++){
    stu[i].display();
}

你必须让你的方法返回修改后的对象stu,然后在main方法中将你的stu对象设置为你的方法返回的新对象。