这个String创建了几个对象 String s="a"+"b"+"c"+"a";s=new String(s);到现在为止,共创建了几对象呢,分别是哪几个? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 6个,不笑得对不对。5个在字符串池,1个是new的 6个吧tring s="a"+"b"+"c"+"a"; s=new String(s); 到现在为止,共创建了几对象呢,分别是哪几个?a,b,c,a 分别是一个 s 是一个下面的 s 又分配了一个 String 不适合做字符串相加6个 晕 String s = “a”+"b"+"c"+...这个jvm会自动优化的,其效果跟用StringBuilder或StringBuffer一样!!! 我也认为是5个 字符串连接会自动调用StringBuilder优化,所以只会产生一个缓冲池的对象 "a" , "b" , "c" , "abca"(String pool 中) , "abca"(堆中) 一共5个 总共是8个对象"a" , "b" , "c", "a" 4个"a"+"b"+"c"+"a" 又创建3个new String(s) 再创建一个总共8个JAVA资料太多?选中想收藏的文字(图片),右键选“收录到易载”,搞定! 严重同意13楼!String s="a"+"b"+"c"+"a"; s=new String(s); StringPool 中: "a" , "b" , "c" (再次的“a”不用再创建,要不然要Pool就没意义了), "abca" 堆中: "abca" 只有两个,"abca" 和 "abca" 的副本"a" + "b" + "c" + "a" 由于全部属于常量,JVM 在编译时就会优化成为 "abca"存放在字符串池中。另 new String(String str) 这个方法,是创建 str 对象的副本(这个方法的API DOC 上有明确的说明)因为,abca 已经在常量池中了,如果是采用 String str = s; 的话,直接将常量池中 abca 的引用地址复制给了变量 str,str 和 s 的引用是一样的。而String str = new String(s); 这时根据 s 的引用值,创建了一个新的对象,而这个对象虽说值与 s 的值是一样的,但是它们值的内部地址是不一样的(s 的引用位于常量数池中,str 的值只是局部变量中的值,并不是引用常量数池中的值)如果是:String s = "a";String str = s + "b";会在常量池中创建两个字符串 "a" 和 "b",后面运算时产生的 "ab" 不会放入常量池中,而是存放于局部变量中了。更多关于字符串内部操作的信息可以看看http://topic.csdn.net/u/20080415/12/3f2b9589-e97c-4129-8941-011bd9203a98.html42 楼的回复。 7个吧String s="a"+"b"+"c"+"a"; s=new String(s);a,b,c是3个ab,abc,abca然后你又new了一下new String(s) ;应该是7个吧呵呵 不是8个...new String(s);只是一个s的引用..不是真实的字符串不能算一个 两个对象String s="a"+"b"+"c"+"a"; 等价于String s="abcd";也就是只创建了一个 “abcd”后面new出一个新的对象 5个 "a", "b", "c", "d", new string(s)s是对象变量而已 用java生成excel的一个问题 boolean isShow; 当事件触发时,if(isShow)isShow=false;if(!isShow)isShow=true 很棘手的问题,关于jdbc的问题,想了一个下午了,没调试出来,大虾们帮帮忙 一个问题搞不清楚,麻烦高手赐教 java中字符串的颠倒怎么写? 如何处理这个字符串??????????? 请教一个JDBC的问题 初学,写了个打开图片程序,功能实现了为什么cpu一直是100% 在线 一个运行错误 怎么使用获取swing的控件里面的所有得值 前辈们,帮小弟一把。。 关于native方法?
tring s="a"+"b"+"c"+"a";
s=new String(s);
到现在为止,共创建了几对象呢,分别是哪几个?
a,b,c,a 分别是一个 s 是一个
下面的 s 又分配了一个
6个
"a" , "b" , "c", "a" 4个
"a"+"b"+"c"+"a" 又创建3个
new String(s) 再创建一个
总共8个
JAVA资料太多?选中想收藏的文字(图片),右键选“收录到易载”,搞定!
s=new String(s); StringPool 中: "a" , "b" , "c" (再次的“a”不用再创建,要不然要Pool就没意义了), "abca"
堆中: "abca"
只有两个,"abca" 和 "abca" 的副本"a" + "b" + "c" + "a" 由于全部属于常量,JVM 在编译时就会优化成为 "abca"
存放在字符串池中。另 new String(String str) 这个方法,是创建 str 对象的副本(这个方法的
API DOC 上有明确的说明)因为,abca 已经在常量池中了,如果是采用 String str = s; 的话,直接将常量
池中 abca 的引用地址复制给了变量 str,str 和 s 的引用是一样的。而
String str = new String(s); 这时根据 s 的引用值,创建了一个新的对象,而
这个对象虽说值与 s 的值是一样的,但是它们值的内部地址是不一样的(s 的引
用位于常量数池中,str 的值只是局部变量中的值,并不是引用常量数池中的值)如果是:String s = "a";
String str = s + "b";会在常量池中创建两个字符串 "a" 和 "b",后面运算时产生的 "ab" 不会放入常量池中,
而是存放于局部变量中了。更多关于字符串内部操作的信息可以看看
http://topic.csdn.net/u/20080415/12/3f2b9589-e97c-4129-8941-011bd9203a98.html
42 楼的回复。
String s="a"+"b"+"c"+"a";
s=new String(s);a,b,c是3个
ab,abc,abca
然后你又new了一下new String(s) ;
应该是7个吧呵呵
String s="a"+"b"+"c"+"a";
等价于
String s="abcd";
也就是只创建了一个 “abcd”
后面new出一个新的对象
s是对象变量而已