String String s = new String("abc") + new String("abc"); 请问这产生几个对象? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每new一次,就会在jvm所管理的内存堆中开辟一块儿区间,用以保存所创建的对象的具体内容,new 了两次就产生了两个对象。 每new一次,就会在jvm所管理的内存堆中开辟一块儿区间,用以保存所创建的对象的具体内容,new 了两次就产生了两个对象。 3个吧,2个new出来的和一个相加的结果字符串对象不知道常量池是否会生成一个"abcabc"对象,如果生成,就有4个 对,如果程序执行到这句的时候,上文已经在常量池生成了"abc",那就产生了3个,否则就是4个。 两个new 两个 在外加一个合起来的 总共三个吧 会构建5个对象。详情请见:http://wlbbswl.javaeye.com/blog/682960 产生4个对象,如同楼上的说法http://wlbbswl.javaeye.com/blog/682960可能注意的是String的引用变量算不算到里面。。我这里没算 至少三个对象。。s 一个对象 两个new 代表两个对象。。至于常量池里面有没有对象我就不是很清楚了!! 按照你的说法:在String池里生成1个"abc"对象;在内存中new了2对象"abc","abc";两个对象相加会在String池里再生成1个对象"abcabc";这加一起也就是4个对象! 怎么会是5个呢? 4个 分解为 String s1= new String("abc"); 创建2个String s2= new String("abc"); +1string s=s1+s2; +1 String s = new String("abc") + new String("abc"); 请问这产生几个对象?2个new 是2个对象 +一起又是一个对象 S是个对象 是4个吧 每new一次,就会在jvm所管理的内存堆中开辟一块儿区间,用以保存所创建的对象的具体内容,new 了两次就产生了两个对象。 看看 java虚拟机的书吧 写的很详细的 String s = new String("abc") + new String("abc");new String("abc") 会产生 2 个 new String("abc") 会产生 2 个 String s 1个一共 5个 个人觉得四个,常量池“abc”1个,new了2个,String s 1个 3个我记得有个经典的问题就是String s = new String("abc"); 这是产生2个对象,那么楼主那个一定是3个。 有StringBuffer么??貌似String的相加会调用StringBuffer啊!~~ 1: "abc"2: new String("abc");3: new String("abc");4: new StringBuffer();5: "abcabc"我觉得应该是这样子的!~~ 解释下第4步,字符串的串联是通过StringBuffer的append方法实现的,然后通过toString方法输出,在字符串缓冲区产生一个"abcabc"我是新人。。欢迎拍砖!~~ 应该是四个,"abc"是字符串常量池中的数,如果存在的话,只会有一个,创建第一new String("abc")时,搜索字符串常量池中是否存在"abc",不存在则创建,这个工作在编译时完成。创建第二个时候先去找池中存不存在"abc",如果存在就什么也不做。在运行的时候再创建两个new String("abc")放在堆区,然后相加之后又生成一个新的对象,也放在堆区。这样总共四个。 我还觉得是4个呢第一个 双引号"abc"第二个 new String("abc")第三个 new String("abc")第四个 两个new的String对象合成的"abcabc" 好像不是这样的吧,当s1 new出 String("abc")在堆内存里就有了两个,只是地址不同而已。而s2只是在String池能在堆内存中找到"abc",就没必要再生成一个"abc"了。同意43楼的。 很显然是三个对象啊。首先String s实例化了一个对象,后面依次实例化两个对象。在内存中处理的过程是:分配两个空间分别用来存放两个“abc”然后再分配一块内存来存s,此时的s=“abcabc”的这就是JAVA中String类的特征。深入内存中才能理解JAVA String类的不可变性质。这也是为什么StringBuffer这个类的好用处所在。 有可能是3个,有可能是2个,如果"abc"内存已经有了,就创建两上,如果内存中没有,就创建2个对像 受不了了,变着花样地问 new String 有多少个对象! 4个,abc和两个new产生的还有个一个abcabc 5个,String s1 = new String("abc") 2个,String s2 = new String("abc") 2个他们不会入池的,应为是new出来的,最后两个s1 + s2 1个。2+2+1 = 5 个人认为是 2 个,两个new算 2 个 ,String类比较特殊,创建之后数据会放在常量区,所以String s 的时候相当于只是去引用而已,并未创建新的变量。 5个String的abc也是对象!new也是对象 2+2+1 5个 如果是字符串对象的话就是4个,一个是"abc",另外两个是new String("abc"),一个是"abcabc"其中当第二次使用new String("abc")的中"abc"已经存在,不需要在重新创建一共四个字符串对象如果还有引用对象的话,还有s 个人看马士兵视频的按他说的应该是3个吧...s+2个new在栈空间,abc分配在堆空间不算 Sring用new去生成对象是先去看String pool中有没有这个对象,没有则这在pool中生成一个对象,再在堆中生成一个对象,返回堆中对象的地址 ; 有则直接在堆中生成一个对象,返回堆中对象的地址;然后new出来的对象相加和new的效果差不多;所以,假设你没有生成过对象,你的那个表达式会生成池中: abc , abcabc 两个堆中: abc 两个 abcabc一个一共 5个 个人看法!!!! 要看按什么角度看,其实这个是要详细得去理解JVM的,将代码反编译就能看出到底是几个了! 理论上是4个,两个 "abc" 算一个(参考 String.intern() 方法),+ 两个 new + 最后赋值那个。但是,我们因该知道,编译器会很聪明的优化~~~所以具体产生的对象得看具体的编译器的版本。 关于配置的小问题 程序结果与我预想的不一样.....请教 请教两个基础问题,谢谢 james 服务器 添加外部jar包的问题? 关于二进制的问题(高手来啊) 初学者问题-水仙花数(20分) 在Eclipse中如何修改web.xml文件 ■□■□■ 不使用jb,用jdk怎么能把程序编译成exe????? 为何子类中的覆盖方法只能抛出和基类方法相同或者更少的异常 怎样用JAVA 写 SERVICE (请高手提示)? 关于字符编码的问题 求高手讲解hashCode
new 了两次就产生了两个对象。
new 了两次就产生了两个对象。
不知道常量池是否会生成一个"abcabc"对象,如果生成,就有4个
详情请见:http://wlbbswl.javaeye.com/blog/682960
可能注意的是String的引用变量算不算到里面。。我这里没算
按照你的说法:
在String池里生成1个"abc"对象;
在内存中new了2对象"abc","abc";
两个对象相加会在String池里再生成1个对象"abcabc";这加一起也就是4个对象! 怎么会是5个呢?
分解为 String s1= new String("abc"); 创建2个
String s2= new String("abc"); +1
string s=s1+s2; +1
new 了两次就产生了两个对象。
我记得有个经典的问题就是String s = new String("abc"); 这是产生2个对象,那么楼主那个一定是3个。
2: new String("abc");
3: new String("abc");
4: new StringBuffer();
5: "abcabc"我觉得应该是这样子的!~~
解释下第4步,字符串的串联是通过StringBuffer的append方法实现的,然后通过toString方法输出,在字符串缓冲区产生一个"abcabc"我是新人。。欢迎拍砖!~~
第一个 双引号"abc"
第二个 new String("abc")
第三个 new String("abc")
第四个 两个new的String对象合成的"abcabc"
首先String s实例化了一个对象,后面依次实例化两个对象。
在内存中处理的过程是:
分配两个空间分别用来存放两个“abc”
然后再分配一块内存来存s,此时的s=“abcabc”的
这就是JAVA中String类的特征。
深入内存中才能理解JAVA String类的不可变性质。
这也是为什么StringBuffer这个类的好用处所在。
String类比较特殊,创建之后数据会放在常量区,所以String s 的时候相当于只是去引用而已,并未创建新的变量。
其中当第二次使用new String("abc")的中"abc"已经存在,不需要在重新创建
一共四个字符串对象
如果还有引用对象的话,还有s
然后new出来的对象相加和new的效果差不多;
所以,假设你没有生成过对象,你的那个表达式会生成
池中: abc , abcabc 两个
堆中: abc 两个 abcabc一个
一共 5个 个人看法!!!!
但是,我们因该知道,编译器会很聪明的优化~~~所以具体产生的对象得看具体的编译器的版本。