实时报道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);创建了几个对象呢?讨论一下为什么?
就创建了一个名为a的字符串对象,这个是典型的String对象实例化方式,在JAVA(或者其他一些语言中)中,这样的实例化方式,等同于:
String a = "abc"+2;
实例化方式,其实两者之间没有什么区别!~
楼主明白~?
晕,这两者区别可大了。
详细看看这篇文章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-16 23:02:44 被【hongyuan19】修改
两者的区别是蛮大的,应该是创建了两个对象。曾经在网上看到过这两者的区别,但现在不太记得了。赞同楼上的。
创建了两个对象,一个是a,一个是“abc”+2.
创建了两个对象,一个是a,一个是“abc”+2. a引用的是“abc”+2的地址.
我感觉它创建了3个对象,一个a,一个常量字符串abc,还有一个字符串abc2
