`
frinder
  • 浏览: 35961 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

复习:java中值传递和引用传递(java基础教程)

 
阅读更多
在Java中,当你给方法传递一个简单类型时,它是按值传递的。因此,接收参数的子
程序参数的改变不会影响到该方法之外。例如,看下面的程序:
// Simple types are passed by value.
class Test {
void meth(int i,int j) {
i *= 2;
j /= 2;
}
}
class CallByValue {
public static void main(String args[]) {
Test ob = new Test();
int a = 15,b = 20;
System.out.println("a and b before call: " +a + " " + b);
ob.meth(a,b);
System.out.println("a and b after call: " +a + " " + b);
}
}
该程序的输出如下所示:
a and b before call: 15 20
a and b after call: 15 20

可以看出,在meth( )内部发生的操作不影响调用中a和b的值。




当你给方法传递一个对象时,这种情形就会发生戏剧性的变化,因为对象是通过引用
传递的
。记住,当你创建一个类类型的变量时,你仅仅创建了一个类的引用。因此,当你
将这个引用传递给一个方法时,接收它的参数将会指向该参数指向的同一个对象。这有力
地证明了对象是通过引用调用传递给方法的。该方法中对象的改变确实影响了作为参数的
对象。例如,考虑下面的程序:
第7 章进一步研究方法和类 117
// Objects are passed by reference.
class Test {
int a,b;
Test(int i,int j) {
a = i;
b = j;
}
// pass an object
void meth(Test o) {
o.a *= 2;
o.b /= 2;
}
}
class CallByRef {
public static void main(String args[]) {
Test ob = new Test(15,20);
System.out.println("ob.a and ob.b before call: " +
ob.a + " " + ob.b);
ob.meth(ob);
System.out.println("ob.a and ob.b after call: " +
ob.a + " " + ob.b);
}
}
该程序产生下面的输出:
ob.a and ob.b before call: 15 20
ob.a and ob.b after call: 30 10
正如你所看到的,在这个例子中,在 meth ( )中的操作影响了作为参数的对象。
有趣的一点是,当一个对象引用被传递给方法时,引用本身使用按值调用被传递。但
是,因为被传递的值指向一个对象,该值的拷贝仍然指向它相应的参数所指向的同一个对
象。

注意:当一个简单类型传递给一个方法时,使用按值传递。对象传递则按引用传
递。


补充:String 是值传递!!!


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics