黑马程序员技术交流社区

标题: 关于字符串对象个数的问题 [打印本页]

作者: 1453149997    时间: 2014-4-2 14:29
标题: 关于字符串对象个数的问题
本帖最后由 1453149997 于 2014-4-5 14:33 编辑

(1)
String str1="aaa";
String str2="aaa"+"bbb";
按照上面的做法,总共在内存里产生了多少个String对象?
(2)
String str="aaa"+"bbb";
按照上面的做法,总共在内存里产生了多少个String对象?
(3)
String str1="aaa";
String str2=str1+"bbb";
按照上面的做法,总共在内存里产生了多少个String对象?
注意:(1)、(2)、(3)没有直接的关系


作者: _Water    时间: 2014-4-2 14:56
由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:
String str1="aaa";
s = “Java语言”;
其实按照面向对象的标准语法,其格式应该为:
String str1 = new String(“aaa”);
只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。
例如String str1 = new String("aaa");
实际上创建了两个String对象,一个是”aaa”对象,存储在常量空间中,一个是使用new关键字为对象str1申请的空间。
所以(1)在内存里产生了2个String对象,(2)在内存里产生1个String对象
作者: 清风木扬    时间: 2014-4-2 15:35
String是不可修改的对象。改String内容后都是返回新的对象。

(1)3个
String str1="aaa";   
String str2="aaa"+"bbb";
按照上面的做法,总共在内存里产生了多少个String对象?
答:共3个,
  String str1="aaa";    产生一个
  String str2="aaa"+"bbb";  “abc"根据享元模式就不生成了,"bbb"算一个,  "aaa"+"bbb" 运算后返回
"aaabbb"再算一个。所以共三个.

(2)3个
String str="aaa"+"bbb";
按照上面的做法,总共在内存里产生了多少个String对象?
答:共3个,
  String str2="aaa"+"bbb";  “abc" 算一个 ,"bbb"算一个,  "aaa"+"bbb" 运算后返回
"aaabbb"再算一个。所以共三个.
作者: 1453149997    时间: 2014-4-2 16:25
本帖最后由 1453149997 于 2014-4-2 16:27 编辑

第二问只会创建一个对象“aaabbb”:
对于第二问String str="aaa"+"bbb"我在网络上搜了一下,说对于这种在源代码级别字符串常量相加的情况,编译器在编译的时候会把它们的+去掉合并为一个常量,那么“aaa”+“bbb”在在编译后会成为“aaabbb”,所以第二问的那句话只会在内存中创建一个对象,即“aaabbb”
作者: 1453149997    时间: 2014-4-2 16:32
_Water 发表于 2014-4-2 14:56
由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:
Str ...

你的结果和原因之间好像缺少一些联系,我无法通过你的原因明白结果。
作者: _Water    时间: 2014-4-2 16:48
如果是使用完整的定义方式:String str1 = new String(“aaa”);(1)在内存里产生了4个String对象,(2)在内存里产生2个String对象,而使用简化的特殊语法定义,则产生的对象对减半。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2