- Allen.CD.China
- 等级: 初级会员

- 性别:

- 文章: 27
- 积分: 0
- 来自: 成都

|
最后更新时间:2007-09-22 关键字: Java传递参数的机制
|
Java究竟是应该按照什么来传递参数?值?引用?还是两者皆有?
其实,弄清楚这个问题得从概念入手。什么是按值传递,什么是按照参数传递。
定义一个变量TestObject obj = new TestObject(); 然后把 obj 作为参数传递给一个方法。如果在这个方法中,只能改变obj指向的这个对象的内容,那就是“值传递”,传过去的值就是指向这个对象的指针。如果在这个方法中通过操作,使得返回后的obj指向另外一个对象,那就是“引用传递”,传过去的是对这个指针变量的“引用”。
代码
- public class Para1 {
- public static void main(String[] args) {
- StringBuffer sb = new StringBuffer("Hello ");
- System.out.println("Before change, sb = " + sb);
- changeData(sb);
- System.out.println("After changeData(n), sb = " + sb);
- }
-
- public static void changeData(StringBuffer strBuf) {
-
- strBuf.append("World!");
- }
- }
把strBuf = new StringBuffer("Hi ");行注释掉和不注释掉将看到两个不同的结果注释的时候:
Before change, sb = Hello
After changeData(n), sb = Hello World!
不注释掉的时候:
Before change, sb = Hello
After changeData(n), sb = Hello
当不注释掉的时候并没有出现:
Before change, sb = Hello
After changeData(n), sb = Hi World!
这说明了,在strBuf = new StringBuffer("Hi ");这行中,strBuf在内存中开辟了一个新的存储地址,不再和开始的sb指向同一个位置,所以,print出来的sb的值没有改变。这个时候的strBuf为"Hi World!"(可以在changeDate方法里面print出来),sb为"Hello"。
所以,根据上面的概念,Java传递参数是属于按值传递,这种情况下参数的值就是对该对象的引用。
|
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
| 返回顶楼 |
|
|
- leeking
- 等级: 初级会员

- 文章: 81
- 积分: 10
- 来自: from sy to sh

|
你不能通过这个实验就推断他是按照什么传递的吧
|
| 返回顶楼 |
|
|
- 92java
- 等级: 初级会员

- 性别:

- 文章: 36
- 积分: 0
- 来自: 长沙

|
|
| 返回顶楼 |
|
|