中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > java高级编程
关于参数传递
作者:未知 时间:2005-07-24 21:15 出处:JR 责编:chinaitpower
              摘要:关于参数传递
    现在网上对java和c++的参数传递机制争论不休,我个人觉得是陷入了概念理解的陷阱。实际上这两者的参数传递机制是完全一样的,只不过java在语言书写这方面做了简化,让程序员看不到指针,以加快开发速度。另外,关于参数类型是基本类型还是复杂类型,他们的传递机制也是一样的。其中传递的都是一个整数值。我们从内存块这一角度来分析的话,或许就能够发现其中奥秘。
c例子如下:
#include <iostream.h>
void exch(int *p1,int *p2);

int main()

int i =1,j=2;
cout<<"i="<<i<<",j="<<j<<endl;
exch(&i,&j);
cout<<"i="<<i<<",j<"<<j<<endl;
return 0;
}

void exch(int *p1,int *p2)
{
int* temp;
temp = p1;
p1 = p2;
p2 = temp;
}
结果为:
i=1,j=2
i=1,j=2

这一程序执行过程中内存变化如下:


 
执行exch之前内存分布如第一章图所示,这时候打印,结果应该是存储在0018和0019单元的1和2。
进入exch方法之后内存分布如第二张图所示,执行完毕exch方法之后内存分布如第三张图所示。这时候打印i和j当然依旧是存储在0018和0019单元的1和2。
在Java中的情形也是一样的。可以将传入exch方法的参数看成是变量i和j的地址,也就是这里的p1和p2是c++里*p1和*p2的简写。如果参数类型不是基本类型,而是引用类型,使用内存分布分析方法也能够得到正确结果(使用引用类型作为例子也许更加容易理解)。在Java中需要注意的是String类,该类实例是不可变的,也就是每次对其做修改都会创建新的String对象,而旧的对象没有改变。
public class Test{
  public static void main(String[] agrs){
    Test t = new Test();
int i = 1;
int j = 2;
System.out.println(i);
System.out.println(j);
t.exch(i, j);
System.out.println(i);
System.out.println(j);
}

public void exch(int p1, int p2){
    int temp = 0;
    temp = p1;
    p1 = p2;
    p2 = temp;
}
}
结果为:
1
2
1
2
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有