首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 网络编程 → 其他相关 → 文章内容

详解Java中的指针、引用及对象的clone

作者:无从考证  来源:CSDN  发布时间:2007-2-6 18:16:32
tem.out.println
("after clone,c1.strBuff = "+ c1.strBuff);
System.out.println("=================================");
System.out.println("after
clone,c2.str = "+ c2.str);
System.out.println
("after clone,c2.strBuff = "+ c2.strBuff);
}
}
/* RUN RESULT
before clone,c1.str = initializeStr
before clone,c1.strBuff = initializeStrBuff
=================================
after clone,c1.str = initializeStr
after clone,c1.strBuff =
initializeStrBuff change strBuff clone
=================================
after clone,c2.str = initi
after clone,c2.strBuff =
initializeStrBuff change strBuff clone
*
*/
 
 
打印的结果可以看出,String类型的变量好象已经实现了深度clone,因为对c2.str的改动并没有影响到c1.str!难道Java把Sring类看成了基本数据类型?其实不然,这里有一个小小的把戏,秘密就在于c2.str = c2.str.substring(0,5)这一语句。
实质上,在clone的时候c1.str与c2.str仍然是引用,而且都指向了同一个String对象。但在执行c2.str = c2.str.substring(0,5)的时候,它作用相当于生成了一个新的String类型,然后又赋回给c2.str。
这是因为String被Sun公司的工程师写成了一个不可更改的类(immutable class),在所有String类中的函数都不能更改自身的值。下面给出很简单的一个例子:

package clone; public class StrTest
{
public static void main(String[] args)
{
String str1 = "This is a test for immutable";
String str2 = str1.substring(0,8);
System.out.println("print str1 : " + str1);
System.out.println("print str2 : " + str2);
}
}
/* RUN RESULT print str1 :
This is a test for immutable print str2 :
This is */
 
 
例子中,虽然str1调用了substring()方法,但str1的值并没有改变。类似的,String类中的其它方法也是如此。当然如果我们把最上面的例子中的这两条语句

c2.str = c2.str.substring(0,5);
c2.strBuff = c2.strBuff.append
(" change strBuff clone");
 
 
改成下面这样:

c2.str.substring(0,5);
c2.strBuff.append
(" change strBuff clone");
 
 
去掉了重新赋值的过程,c2.str也就不能有变化了,我们的把戏也就露馅了。但在编程过程中只调用

c2.str.substring(0,5);
 

上一页  [1] [2] [3] [4] 

[] [返回上一页] [打 印]
  • 上一篇文章:讲解关于编写跨平台Java程序时的注意事项
  • 下一篇文章:非java.util.zip,使用ant.jar制作zip压缩文件,以及相关中文解决方法

  • 相关文章:
  • clone模式在平衡排序二叉树实现中的应用
  • 脚本欣赏----Shell Script to Clone Linux System -...
  • RealOne Player超级小技巧两则
  • 如何通过RealOne刻录光盘
  • [图文]RealOne Player操作小技巧三则
  • [图文]让RealONE网上播放更流畅
  • 详解Java中的指针、引用及对象的clone
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号