老题了,一直不理解:String s = "a" + "b" + "c" + "d" + "e";一共创建了几个对象???
这个语句一共创建了几个对象???
看了老紫竹的博客http://blog.csdn.net/java2000_net/archive/2009/01/02/3681385.aspx
不懂,
常量就不是对象了么???
还有网上很多种说法,有人能给解释一下么????
[解决办法]
汗...我也得再去看看这方面的了
[解决办法]
怎么又来String问题了,这些对象的创建叫做字面量,是在编译时期就完成的,编译器的优化会把结果计算出来单独创建一个字符串对象‘abcde’
对运行最好的优化是编译期间把这种计算给完成,就是1个对象,当然具体也要看编译器的优化程度,也可能有6个或者更多
[解决办法]
分析的好透彻哦
[解决办法]
看了2楼,学习
[解决办法]
一个对象。。。
[解决办法]
一个嘛,讲得很多了
[解决办法]
http://blog.csdn.net/yakihappy/archive/2009/03/10/3977169.aspx
有相信说明!
[解决办法]
学习
[解决办法]
竹子哥的博客写的很好
顶下
[解决办法]
这个问题在这个版块最少出现过 100 次!
[解决办法]
java语言本身的东东
[解决办法]
9个
[解决办法]
[解决办法]
http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
[解决办法]
网上答案太多,就是不知道哪个是对的。对象的引用也是对象???
[解决办法]
哎..要是面试不问这种题.
那这种题也可以含笑而枯了
[解决办法]
以前我看到这个题就头痛,为什么现在我一看这个题就胃痛了呢?
[解决办法]
一个...lz
[解决办法]
额。。。长见识了。
[解决办法]
绝对是一个。LZ,看多了这些文章,会使脑子不好使。
[解决办法]
顶了
学习
[解决办法]
一个!
都是字面量
[解决办法]
就创建了一个
[解决办法]
就只有一个。建议编译后再反编译回来看看什么效果。
建议不要想这种无聊的问题了,毫无意义。
[解决办法]
没有什么意义。。。
[解决办法]
猜的!!
String s 1
a 2
b 3
c 4
d 5
e 6
S = a+b 7
S = a+b+c 8
s = a+b+c+d 9
s = a+b+c+d+e == s 1
不知道理解的对不对
[解决办法]
不看我还真不知道几个
[解决办法]
[解决办法]
对象只创建了一个
如果后面拼接的是对象的话,那么拼接应该是"+变量+"这样的格式才对
[解决办法]
java面试的时候经常问到,就一个。
[解决办法]
看了这么多还是二楼的说得有道理。这东西不能多看,越看越糊涂。
[解决办法]
又是String的。的回头再看看。
[解决办法]
UP
[解决办法]
我和27楼的观点相似,但认为如果池中存在对象的话,就会少创建几个! 比如说如果String池中原来就有a,那么就不会再去创建a了!
[解决办法]
[解决办法]
《thinking in java》上好像讲过的
[解决办法]
顶
[解决办法]
看编译器, 不过按规范的话就是1个"abcde"
[解决办法]
如果说法不同,只是因为JDK的版本不同,而对字符串的处理也不同而已。
楼主不懂,其原因主要还是不明白编译原理,如果楼主真想明白,建议先去弄明白编译原理吧,懂了编译原理,那这个问题也就不问自明了。
[解决办法]
长见识了呀
[解决办法]
长见识了。谢谢lz。
[解决办法]
我觉得这个问题还是从java的内存管理上来分析比较合适。
内存可以分成这样四个区域:
1、heap(堆);——存放对象的区域(或者说存放new出来的东西的区域)
2、stack(栈);——存放局部变量的区域
3、data segment;——存放静态变量、字符串常量的区域
4、code segment;——存放代码的区域
String s = "a" + "b" + "c" + "d" + "e";
这句的意思就是在heap里分配一小块区域,存放一个名字叫s的String类对象;
而s是由存放在data segment里面的常量"a" + "b" + "c" + "d" + "e"组成的;
"a" + "b" + "c" + "d" + "e"又是从哪里来的呢?
当然是从code segment直接调到data segment里的~\()/~啦啦啦!
不知道这样解释够不够清楚呢!!!
[解决办法]
其实就一个。
[解决办法]
学习。。。
[解决办法]
[解决办法]
[解决办法]
长见识了
[解决办法]
日经贴呀 看jvm去吧