CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > Java技术

Java中究竟是传值还是传引用

作者: wwty,  出处:IT专家网论坛, 责任编辑: 包春林, 
2008-05-16 04:00
  在Java中,事实上底层工作原理不存在传引用的概念,这也象《Practical Java》中所说的那样,Java中只有传值。这句话理解起来需要费一定的周折。

  在执行到第2行的时候,变量x指向一个存放着int 0的内存地址。

  变量x---->[存放值0]

  执行第3行调用change(x)方法的时候,内存中是这样的情形:x把自己值在内存中复制一份,然后变量i指向这个被复制出来的0。

  变量x---->[存放值0]

  ↓进行了一次值复制

  变量x---->[存放值0]

  这时候再执行到第7行的时候,变量i的被赋值为7,而这一步的操作已经跟x没有任何关系了。

  变量x---->[存放值0]

  变量x---->[存放值7]

  说到这里应该已经理解为什么change(x)不能改变x的值了吧?因为这个例子是传值的。

  那么,试着分析一下为什么例三中的switchValue()方法不能完成变量值交换的工作?

  再看例2。

  //例2

  

      1void method1(){

  2 StringBuffer x=new StringBuffer("Hello");

  3 this.change(x);

  4}

  5

  6void int change(StringBuffer i){

  7 i.append(" world!");

  8}

  例2似乎和例1从代码上看不出什么差别,但是执行结果却是change(x)能改变x的值。依然才从内存的存储角度来看看例2的蹊跷在哪里。

  在执行到第2行时候,同例1一样,x指向一个存放"Hello"的内存空间。

  变量x---->[存放值"Hello"]

  接下来执行第三行change(x),注意,这里就与例1有了本质的不同:调用change(x)时,变量i也指向了x指向的内存空间,而不是指向x的一个拷贝。

  变量x \

  -->[存放值"Hello"]

  变量x /

  于是,第7行对i调用append方法,改变i指向的内存空间的值,x的值也就随之改变了。

?6?? 9 1 2 3 4 5 6 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i