package one;
class T {
private int a;
T(int x) {
a=x;
}
public void set(int x) {
this.a=x;
}
public void change(T X) {
X.set(90);
}
public void change1(T Y) {
Y=new T(50);
}
public void show() {
System.out.println(a);
}
}
public class break1 {
public static void main(String args[]) {
T A=new T(30);
T B=new T(40);
B.show();
A.change1(B);为什么调用这条语句不会改变a的值?
B.show();
A.change(B);为什么调用这条语句会改变a的值?
B.show();
}}输出结果是40 40 90,java中没有引用符号&,用什么才是java中的引用?

解决方案 »

  1.   

    java中参数的传递有两种方法,值传递和引用传递。值传递就是基本数据类型传递,就是复制一份实参的值给形参,形参和实参是不同的内存单元。所以形参的改变不会影响到实参。引用传递就是非基本数据类型的传递,其本质上还是值传递,不过传递的是该对象的引用,所以引用不可变,但是引用的对象的属性可以改变。现在来看看,你上面的程序。change1方法里,在执行Y=new T(50);之前,形参和实参指向同一段内存单元,但是当执行之后,形参就指向了另一段内存单元,修改的时候只是修改形参的值,但是这不会影响实参的值。所以执行A.change1(B);这句代码时,不会改变a的值。相反,在change方法里面,形参和实参指向同一段内存单元,所以在方法里面修改形参的值,在本质上来说也就是修改实参的值。所以执行A.change(B);后a的值改变了。
      

  2.   

    java中的引用其实就是c语言中的指针,但是java在语言层面上不支持指针的!