首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包

2007年度中国软件技术英雄会暨CSDN社区英雄榜颁奖典礼 [加入]

实时报道2007年度中国软件技术英雄会暨CSDN社区英雄榜颁奖典礼的最新动态,关注此次活动的最新进展情况。
String   a   =   new   String( "abc "+2);创建了几个对象
发表时间:2008-05-15 11:01:41   楼主:smallIT

我们都知道String a = new String("abc“);创建了两个对象。哪么

String a = new String("abc"+2);创建了几个对象呢?讨论一下为什么?





 
发表时间:2008-05-16 17:52:22 1 楼:xiaopenglong

就创建了一个名为a的字符串对象,这个是典型的String对象实例化方式,在JAVA(或者其他一些语言中)中,这样的实例化方式,等同于:

 

String a = "abc"+2;

 

实例化方式,其实两者之间没有什么区别!~

楼主明白~?

发表时间:2008-05-16 23:01:18 2 楼:hongyuan19

晕,这两者区别可大了。

详细看看这篇文章http://blog.csdn.net/hongyuan19/archive/2007/11/10/1877711.aspx

似乎String a = new String("abc");创建了两个对象?为什么?a只是一个引用变量,不能算作对象。这个只是在heap中创建一个字面值为abc的对象,根据jdk文档,只有调用了a.intern(),这个对象才会在串池中无相同字面值对象时被加入到串池中,并返回串池中该字面值对象的引用。

至于String a = new String("abc"+2);可以看上面的那篇文章的最后一个部分,可能涉及到编译器的优化问题。

本回复于:
2008-05-16 23:02:44 被【hongyuan19】修改
发表时间:2008-05-20 14:28:30 3 楼:mzhhui
       两者的区别是蛮大的,应该是创建了两个对象。曾经在网上看到过这两者的区别,但现在不太记得了。赞同楼上的。
发表时间:2008-06-06 18:52:13 4 楼:fztjava

创建了两个对象,一个是a,一个是“abc”+2.

发表时间:2008-06-07 01:52:49 5 楼:wengcl
创建了两个对象,一个是a,一个是“abc”+2.    a引用的是“abc”+2的地址.
发表时间:2008-06-09 18:57:02 6 楼:xiongxunqin

我感觉它创建了3个对象,一个a,一个常量字符串abc,还有一个字符串abc2

网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|版权声明|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo