感恩三周年,极客节签到送极客币、免费送书、VIP买一送一、职业学院5折优惠,快乐享不停!

引用传递

flashtang Java面向对象中引用的传递 最后由 ltpower_learn 于02月25日 10:44回复

  • 6 解决
  • 980 浏览

请问为什么在第一个程序中可以出现输出不同值,但是第二个程序不行?


class Ref1{

int temp=10;

}

public class ClassDemo05 {

   public static void main(String[] args) {

Ref1 ref1=new Ref1();

ref1.temp=20;

System.out.println(ref1.temp);

tell(ref1);

System.out.println(ref1.temp);

}

   

   

    public  static void tell(Ref1 ref2) {

ref2.temp=30;

}

}



public class ClassDemo07 {

public static void main(String[] args) {

int a=10;

System.out.println(a);

tell(a);

System.out.println(a);

}

public static void tell(int b) {

b =30;

}

}

  • 极客学院_ASMITA 2015年07月22日 回答 #1楼
  • 第一个程序输出两个值ref1.temp = 20;,然后tell(ref1);tell方法改变了ref1的temp值为30,所以是2个值

    通过建立内部元素的方法,完成了外部元素调用内部元素,且将外部元素全局化

    说白了,ref1在main中是有效的,ref1的temp也是有效的,把ref1传给tell,tell修改ref1.temp是可以直接改的,传给tell的是个指针,修改的是指针下面的内存值

    第二个元素改变的是局部变量,传递过去以后是个指针,然后指针的值被复制后用了,所以对外部没有产生影响

  • 3 评论
  • flashtang 2015年07月22日 回答 #3楼
  • #1楼   @极客学院_ASMITA

    谢谢老师的解答,我是新手,看看我理解的对不对:第一个是全局变量,所以可以被下面的各个方法调用,但是第二个是局部变量,只能在main方法中定义使用。

  • 0 评论