java方法中的参数传值

今天看了一下别人到blog关于java方法中到参数传值到问题,突然仔细想了一下,原来自己一直也没弄懂。看下面到例子:
public class cl{
private int a=3,b=4;

public void swap(int a,int b){
int c=9;
a=c;
System.out.println("=====inner a======="+a);
}


public static void main(String args[]){
cl c=new cl();
c.swap(c.a,c.b); //形参,与实参。
System.out.println(c.a);
}


}

程序运行到结果是:
=====inner a=======9;
3;
这个是参数直接传递基本类型的例子。
还有一个例子是参数传递对象的:
 public void call(Test t) { 
Test t2 = new Test();
t2.setName("cba');
t.setName("abc");
t = t2 ;
}

public static void main(String[] arg) {
Test obj = new Test();
call (obj) ;
System.out.println("obj"+obj.getName());
}
程序运行到结果是:
abc
两个传参一个是基本类型,一个对象,总结网上很多说法,但是还是没有清楚到给出它们的
底层内存分配运行是的状况。但是有如下共识:
[b]对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。
对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。
方法体内对参数进行运算,不影响原有变量的值。
方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。[/b]
对jvm的具体分配目前还不懂,但是目前我们可以这样理解,对传递基本类型的时候,我们把形参当成一个局部变量,传递基本类型的时候,就是传递值的拷贝,对形参进行赋值,只影响到局部变量,离开作用域,该局部变量失效。对传递引用类型的时候,一样形参是个局部变量,传递引用类型,传递是引用的一个拷贝。对形参进行赋值,也同样改变了该局部变量的引用地址。离开作用域,局部变量失效,原来的变量没有任何变化,对下面的这中情况,可能有疑问。例如:
   public static void swap(int a[])
{

a[0]=9999;
}

public static void main(String args[])
{

int c[]={3};
swap(c);
System.out.println(c[0]);
}

运行的结果是,9999,对此解释是,数组是对象,我们在方法中改变的是引用所指向的对象的值,所以局部变量即使失效后,它堆上的内容发生改变了,所以到后来就变了,所以我们对对象传递参数时,必须很清楚的知道自己改变了的是对象的引用改变了,还是在堆上的引用所指向的对象的值改变了,这个很重要,因为这样才能达到我们的目的了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值