A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2014-5-27 18:42  /  7984 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先要明确的是以String s = "abc"这种形式创建的字符串是存储在常量池中的,如果常量池中有相应的字符串则不创建新的字符串对象,即不重新在常量池中分配空间。
lz的例子中,如果之前以上述形式创建过"abc"这个字符串,则String s="a"+"b"+"c"这个语句实际上是没有创建对象的,而是直接返回常量池中"abc"的引用,否则,就在常量池中创建一个"abc"的字符串对象,因此是创建了0个或1个对象!!!!

点评

完全正确,编译器对字符串【常量】操作有做功能上的优化,"a"+"b"+"c"这种会被直接优化成"abc"来进行操作。  发表于 2014-5-28 10:48
回复 使用道具 举报 5 0
想飞的鱼 发表于 2014-5-27 20:48
首先,其实+连接符是通过StringBuffer类和它的append方法实现的,
String s = "a"+"b"+"c";这句代码在编译 ...

以StringBuffer类创建的字符串是存储在堆内存中的,而String s="a"+"b"+"c"这种形式创建的字符串是放在常量池中的,如果是这样的话,有点矛盾咧。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马