首页 | 注册 | 登陆
首页 >> 技术专栏 >> java文章 >> java其它 

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


作者java 来源java 加入时间:2006年03月28日
摘要:
法参数传值传引用的一点看法

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

转载:转载请保留本信息,本文来自
http://www.51dibs.com
/html/2006/article/info14/a_a1c54cbfbddc17d6.htm




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


站点:爱心种子小博士 关键字:法参数传值传引用的一点看法




法参数传值传引用的一点看法
 
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当成基本类型来处理 。所以值是不变的。



发布人:java
→ 推荐给我的好友 → 报告错误链接
上篇文章:中获取系统属性
下篇文章:与ASP木马上传
〖文章打印〗
〖关闭窗口〗
发表评论
查看评论
中“法参数传值传引用的一点看法”相关内容 中“法参数传值传引用的一点看法”相关内容
中“法参数传值传引用的一点看法”相关内容 中“法参数传值传引用的一点看法”相关内容
中“法参数传值传引用的一点看法”相关内容 中“法参数传值传引用的一点看法”相关内容

关于我们网站留言友情链接与我在线与我聊天领取红包管理TOP