快速业务通道

JAVA中的指针,引用及对象的clone - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
操作。

除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。如:

package reference; class PassObj {    String str = "init value"; } public class ObjPassValue {    public static void main(String[] args)    {      PassObj objA = new PassObj();      PassObj objB = objA;      objA.str = "changed in objA";      System.out.println("Print objB.str value: " + objB.str);    } } /* RUN RESULT Print objB.str value: changed in objA */

JAVA中的指针,引用及对象的clone(2)

时间:2011-01-06 IBM 倪大鹏

第一句是在内存中生成一个新的PassObj对象,然后把这个PassObj的引用赋给变量objA,第二句是把PassObj对象的引用又赋给了变量objB。此时objA和objB是两个完全一致的变量,以后任何对objA的改变都等同于对objB的改变。

即使明白了Java语言中的"指针"概念也许还会不经意间犯下面的错误。

Hashtable真的能存储对象吗?

看一看下面的很简单的代码,先是声明了一个Hashtable和StringBuffer对象,然后分四次把StriingBuffer对象放入到Hashtable表中,在每次放入之前都对这个StringBuffer对象append()了一些新的字符串:

package reference; import java.util.*; public class HashtableAdd{    public static void main(String[] args){      Hashtable ht = new Hashtable();      StringBuffer sb = new StringBuffer();      sb.append("abc,");      ht.put("1",sb);        sb.append("def,");      ht.put("2",sb);      sb.append("mno,");      ht.put("3",sb);      sb.append("xyz.");      ht.put("4",sb);           int numObj=0;      Enumeration it = ht.elements();      while(it.hasMoreElements()){        System.out.print("get StringBufffer "+(++numObj)+" from Hashtable: ");        System.out.println(it.nextElement());      }    } }

如果你认为输出的结果是:

get StringBufffer 1 from Hashtable: abc,

get StringBufffer 2 from Hashtable: abc,def,

get StringBufffer 3 from Hashtable: abc,def,mno,

get StringBufffer 4 from Hashtable: abc,def,mno,xyz.

那么你就要回过头再仔细看一看上一个问题了,把对象时作为入口参数传给函数,实质上是传递了对象的引用,向Hashtable传递StringBuffer对象也是只传递了这个StringBuffer对象的引用!每一次向Hashtable表中put一次StringBuffer,并没有生成新的StringBuffer对象,只是在Hashtable表中又放入了一个指向同一StringBuffer对象的引用而已。

对Hashtable表存储的任何一个StringBuffer对象(更确切的说应该是对象的引用)的改动,实际上都是对同一个"StringBuffer"的改动。所以Hashtable并不能真正存储能对象,而只能存储对象的引用。也应该知道这条原则对与Hashtable相似的Vector, List, Map, Set等都是一样的。

上面的例程的实际输出的结果是:

/* RUN RESULT get StringBufffer 1 from Hashtable: abc,def,mno,xyz. get StringBufffer 2 from Hashtable: abc,def,mno,xyz. get StringBufffer 3 from Hashtable: abc,def,mno,xyz. get StringBufffer 4 from Hashtable: abc,def,mno,xyz. */

JAVA中的指针,引用及对象的clone(3)

时间:2011-01-06 IBM 倪大鹏

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号