java方法参数传值传引用的一点看法

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

java 跟C++不同,java的方法参数都是传值,没有传引用。很多人都以为是传引用,而且这种错误的观点很普遍,今天在这里具体分析一下。方法参数有基本类型,如int等,另外一种类型是OBJECT,对象。详细说一下方法参数是对象的,跟C++不同的是,JAVA方法参数传对象,传的是对这个对象引用的一份拷贝,即地址值,跟原来的引用都是指向同一个对象。所以说,JAVA方法参数传的都是值。

程序一 传的对象值是改变的。

public class Test

{

public Test()

{

int [] count={5};

change(count);

System.out.println(count[0]);

}

public void change(int [] counts)

{

counts[0]=6;

System.out.println(counts[0]);

}

public static void main(String [] args)

{

Test t=new Test();

}

}

程序一中,输出结果都是6,change(count); 把对象的一份引用拷贝传给change(),这个拷贝跟原来的引用都是指向同一个对象。所以改变引用拷贝的值,对象的值也跟着改变。

程序2,传的对象值不改变

class Foo{

int i=0;

}

public class A{

public static void main(String args[]){

Foo f=new Foo();

add(f);

System.out.println(f.i);

}

public static void add(Foo f){

f=new Foo();

f.i++;

}

}

输出结果是0

程序2中,也是传一份引用的拷贝,但在 add()方法中,f=new Foo(); NEW出了一个新的对象,所以引用的拷贝指向了一个新的OBJECT。原来的值还是没有改变。

程序3 String 不改变,数组改变

public class Example{

String str=new String("good");

char[]ch={'a','b','c'};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+" and ");

Sytem.out.print(ex.ch);

}

public void change(String str,char ch[]){

str="test ok";

ch[0]='g';

}

}

程序3输出的是 good and gbc.

String 比较特别,是因为java在传string的时候把string当成基本类型来处理 。所以值是不变的。

上面三个例子可以说明一些问题。有不同意见大家可以讨论讨论。QQ:danke 56355337

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有