这里是一个Change类:注意方法change参数列表中的TestStudent testStudent,之前用的是int,导致了值传递age的变化;
public class Change {
void change(TestStudent testStudent,int a,int exam[])//用TestStudent testStudent代替了int,
{                                                    
testStudent.age += 10;
a +=1;
exam[0] += 10;
exam[1] += 10;
exam[2] += 10;
}
}
第二个类,测试类
public class test {
public static void main(String[] args) {
TestStudent zhangsan = new TestStudent();
zhangsan.age = 20;    //问题:age是放在堆中呢还是放在栈中;
int a = 10;
int[] exam = {45,59,99};

System.out.printf("age的值是:%d \n",zhangsan.age);
System.out.printf("普通变量a的值是:%d \n",a);
System.out.printf("exam[0]的值是:%d \n",exam[0]);
System.out.printf("exam[1]的值是:%d \n",exam[1]);
System.out.printf("exam[2]的值是:%d \n",exam[2]);

Change hehe = new Change();
hehe.change(zhangsan, a,exam);      //注意这里的zhangsan,将对象传入参数;

System.out.println("Change方法执行之后:\n");
System.out.printf("age的值是:%d \n",zhangsan.age);
System.out.printf("普通变量a的值是:%d \n",a);
System.out.printf("exam[0]的值是:%d \n",exam[0]);
System.out.printf("exam[1]的值是:%d \n",exam[1]);
System.out.printf("exam[2]的值是:%d \n",exam[2]);
}
}
第三个类:


public class TestStudent {
int age;
String name;
int a;
}






//这段程序的目的是验证了zhangsan.age的具体数值是放在堆中的,以前zhangsan.age在调用了change方法之后仍然不变,这个异常是由于之前change方法里面,自己将age定定义为了int 类型导致的,现在问题的解决方案是将Teststudent类的一个对象teststudent传入change函数的参数,这样的话引用传递之后zhangsan.age就被改变了;