(转)java中方法参数传递问题

下面的代码说明了java给方法传递参数时,原参数是否发生变化的演示:

public class Test {
public int count;
public static void main(String[] args) {
int s=0;
System.out.println("s="+s);
test(s);
System.out.println("s="+s);
TestA t=new TestA();
t.count=0;
System.out.println("t.count="+t.count);
test(t);
System.out.println("t.count="+t.count);
}
public static void test(int i){
i+=10;
}
public static void test(TestA ts){
ts.count+=10;
}
}
class TestA{
public int count;
}

输出:

s=0
s=0
t.count=0
t.count=10

解释:java是如此的简单而华丽,变量,无论是基本类型的还是引用类型的变量在进行方法参数传递时都是一样,就是把自身的值拷贝一份给方法去执行,换句话说,方法中所用的参数是变量的一个副本而已,方法体内的任何操作都不会影响原变量的值,对于基本类型变量如此,对于引用类型变量亦是如此,这里特别强调的是变量的值,基本类型很简单就是一个保存在栈中的值,拷贝的也是这个值,而引用变量的值是一个指向对象的地址,拷贝的是指向同一个对象的地址,也就是同一个引用,虽然原来的引用变量值(地址)不会改变,但是如果在方法体中,通过拷贝的引用地址对对象进行了操作肯定会影响到原变量,原变量也是指向那个对象的,t.count本为0,在test()方法中通过复制的地址ts,引用了同一对象t, ts.count+=10,那么对象发生了改变,原来的引用变量再次引用这个对象时也是调用了改变之后的对象...那么有么有方法避免呢?就是在方法中把复制的地址改变,让其指向别的对象,这样就不会改变源对象的值了,比如:

public static void test(TestA ts){

ts=new TestA();

ts.count+=10;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值