CTOCIO IT专家网

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

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

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

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

  变量x \

  -->[追加为"Hello World!"]

  变量x /

  为什么x值能改变呢?因为这个例子是传引用的。

  这几个例子是明白了,可是很多人会开始有另一个疑问了:这样看来,到底什么时候是传的值什么时候是传得引用呢?于是,我们前面讲到的类型和类在这里就派上了用场:对于参数传递,如果是简单数据类型,那么它传递的是值拷贝,对于类的实例它传递的是类的引用。需要注意的是,这条规则只适用于参数传递。为什么这么说呢?我们看看这样一个例子:

  //例5

  String str="abcdefghijk";

  str.replaceAll("b","B");

  这两句执行后,str的内容依然是"abcdefghijk",但是我们明明是对str操作的,为什么是这样的呢?因为str的值究竟会不会被改变完全取决于replaceAll这个方法是怎么实现的。类似的,有这样一个例子:

  //例6

  

      1 void method1() {

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

  3 change1(x);

  4 System.out.println(x);

  5 }

  6

  7 void method2() {

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

  9 change2(x);

  10 System.out.println(x);

  11 }

  12

  13 void change1(StringBuffer sb) {

  14 sb.append(" world!");

  15 }

  16

  17 void change2(StringBuffer sb) {

  18 sb = new StringBuffer("hi");

  19 sb.append(" world!");

  20 }

  调用method1(),屏幕打印结果为:"Hello world!"

共6页。 9 1 2 3 4 5 6 :

网友评论

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

邮件订阅

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