以前学习C的 时候参数传递的方式有两种,一种叫"值传递",值传递传的是一个实体,通俗地说就是传值;另一种叫"引用传递",引用传递传的是指针。
在这里重点讨论以引用的方式传递参数的方式。
在java中只要不是new出来的对象那么就是
Java代码
- MyClass mc = new MyClass(); //在内存中生成MyClass对象
- MyClass mc2 = mc; //将mc2指向mc在内存中的对象
MyClass mc = new MyClass(); //在内存中生成MyClass对象 MyClass mc2 = mc; //将mc2指向mc在内存中的对象
上面的mc和cm2是同一个对象。
Java代码
- Operator opt = new Operator();
- MyClass mc = new MyClass();
- MyClass mc2 = mc;
- mc.add();
- System.out.println(mc.i);
- System.out.println(mc2.i);
- opt.sub(mc2);
- System.out.println(mc.i);
- System.out.println(mc2.i);
Operator opt = new Operator(); MyClass mc = new MyClass(); MyClass mc2 = mc; mc.add(); System.out.println(mc.i); System.out.println(mc2.i); opt.sub(mc2); System.out.println(mc.i); System.out.println(mc2.i);
结果:
Java代码
- run:
- 1
- 1
- 0
- 0
- 成功生成(总时间:0 秒)
run: 1 1 0 0 成功生成(总时间:0 秒) Java代码 <embed height="15" width="14" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=%20%20%20%20%20%20%20%20Operator%20opt%20%3D%20new%20Operator()%3B%0A%20%20%20%20%20%20%20%20MyClass%20mc%20%3D%20opt.getMyClass()%3B%0A%20%20%20%20%20%20%20%20mc.add()%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22add%3A%22%20%2B%20mc.i)%3B%0A%20%20%20%20%20%20%20%20add(mc)%3B%0A%20%20%20%20%20%20%20%20opt.sub1(mc)%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22sub1%3A%22%20%2B%20mc.i)%3B%0A%20%20%20%20%20%20%20%20opt.sub2(mc)%3B%2F%2F%E5%9C%A8%E6%96%B9%E6%B3%95%E9%87%8C%E9%9D%A2%E5%AF%B9%E5%AF%B9%E8%B1%A1%E8%BF%9B%E8%A1%8C%E6%93%8D%E4%BD%9C%E4%B9%9F%E4%BC%9A%E5%AF%B9main%E4%B8%AD%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%9C%89%E5%BD%B1%E5%93%8D%EF%BC%8Creference%E8%B0%83%E7%94%A8%E7%9A%84%E7%BB%93%E6%9E%9C%0A%20%20%20%20%20%20%20%20System.out.println(%22sub1%3A%22%20%2B%20mc.i)%3B" src="http://lauvenman.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" lk_mediaid="lk_juiceapp_mediaPopup_1232590065375" lk_media="yes">
- Operator opt = new Operator();
- MyClass mc = opt.getMyClass();
- mc.add();
- System.out.println("add:" + mc.i);
- add(mc);
- opt.sub1(mc);
- System.out.println("sub1:" + mc.i);
- opt.sub2(mc);//在方法里面对对象进行操作也会对main中的对象有影响,reference调用的结果
- System.out.println("sub1:" + mc.i);
Operator opt = new Operator(); MyClass mc = opt.getMyClass(); mc.add(); System.out.println("add:" + mc.i); add(mc); opt.sub1(mc); System.out.println("sub1:" + mc.i); opt.sub2(mc);//在方法里面对对象进行操作也会对main中的对象有影响,reference调用的结果 System.out.println("sub1:" + mc.i);
运行结果:
Java代码
- run:
- add:1
- sub1:2
- sub1:-98
- 成功生成(总时间:0 秒)
run: add:1 sub1:2 sub1:-98 成功生成(总时间:0 秒)