java方法参数传递问题

时间:2021-07-31 17:32:34


本文属本人原创,如要转载,请指明出处(http://blog.csdn.net/rypgood),本人保留法律权力。


java方法参数问题是一个热门话题,在各类考试如scjp,国家等级考试,各种笔试题等都是必考内容。在

网上也有很多讨论这个问题的文章和视频,但是笔者都觉得说的不好,把简单的问题无限复杂化了。他们

总在传值还是传地址的问题上或者基本类型与引用类型的问题上纠缠不清。笔者不才,也说说参数的传递问题。
这里只说单个参数的问题,多个参数的类推,不用讨论。
假如有一个方法如下:

public void test(MyClass var)
{
 //这里包含对var处理的语句。
}
只要稍微改动一下,你就会很容易地明白参数是怎么传递怎么操作的了:
public void test(MyClass var)
{
 MyClass var2=var;
 //把对var处理的语句都改成var2
}
这样改动后,两个方法的效果是一样的。
其实,java虚拟机在处理方法参数的时候,也就是这样处理的:
在方法体内局部创建一个指向参数所指向的对象的引用,然后直接操作这个引用。
所以,你想,假如在方法体里面存在如
var=new Myclass();
的语句,就相当于第二个方法中的
var2=new MyClass();
这个语句,这样的操作对var当然没有影响了。
但是若是第一个方法中存在
var.xxx();
语句(var.xxx()是MyClass定义的方法),即使改成第二个方法,变成
var2.xxx();
还是会对var造成影响。
所以,在这里我们不讨论传值还是传地址的问题,也不讨论基本类型还是引用类型的问题,如果你碰到方

法参数传递问题,只要把它改成第二个方法的样式来处理,绝对不会错。