String str=new String()+"abc"一共创建了几个对象?

lzyfast 2009-11-16 04:17:04
String str=new String()+"abc"一共创建了几个对象?
...全文
1942 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
买房动力十足 2012-10-07
  • 打赏
  • 举报
回复
楼主还木有结贴嘛?
zhangzhongke007 2009-11-18
  • 打赏
  • 举报
回复
到底几个,谁对谁错?
imasmallbird 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 annchaling 的回复:]
引用 46 楼 liuhw_job 的回复:
三个
"abc"----->1个
new String()--->1个
new String()+"abc" ---->1个

你的意思是String str不是一个对象咯,意思说str和new String()+"abc"是同一个对象了。
那好,现在我们假设有2个String对象引用
Java codeString str1=new String()+"abc";
String str2= str1;
str1="a";
System.out.println(str1);
System.out.println(str2);
那么按照你的想法既然str1和new String()+"abc"是同一个对象,那么在接下来我让str2指向str1,然后改变str1的指向,既然你说str1和new String()+"abc"是同一个对象,那么请你来解释一下既然我改变了同一个对象的值(引用),为什么str2的指向依然为str1指向改变之前的对象,按你说的改变了同一个对象那么应该对象被改变了才是
[/Quote]
你要记住,JAVA字符串是不可变的
str2指向str1是将之前str1指向对象的地址给了str2
str1="a";是将str1指向了常量池中的"a",只是改变了str1引用的值,而不是改变了原有的对象内容,此时str2并没有被改变
jcqhaha 2009-11-18
  • 打赏
  • 举报
回复

楼34
方法啊
事实说话
jlh2 2009-11-18
  • 打赏
  • 举报
回复
第二次看到这个问题,上次不是又结论是3个了吗?
安小寰 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 liuhw_job 的回复:]
三个
"abc"----->1个
new String()--->1个
new String()+"abc" ---->1个
[/Quote]
你的意思是String str不是一个对象咯,意思说str和new String()+"abc"是同一个对象了。
那好,现在我们假设有2个String对象引用
String str1 = new String()+"abc";
String str2 = str1;
str1 = "a";
System.out.println(str1);
System.out.println(str2);

那么按照你的想法既然str1和new String()+"abc"是同一个对象,那么在接下来我让str2指向str1,然后改变str1的指向,既然你说str1和new String()+"abc"是同一个对象,那么请你来解释一下既然我改变了同一个对象的值(引用),为什么str2的指向依然为str1指向改变之前的对象,按你说的改变了同一个对象那么应该对象被改变了才是
liuhw_job 2009-11-18
  • 打赏
  • 举报
回复
三个
"abc"----->1个
new String()--->1个
new String()+"abc" ---->1个
designedIt 2009-11-18
  • 打赏
  • 举报
回复
一个不知道重复了多少次的问题了。每过一段时间,就会重复出现一次。楼主若搜索一下CSDN,会找到许多的。

几个String对象
当然是3个String对象了。

因为:String str=new String()+"abc";编译时是按如下代码进行的

String s = (new StringBuilder()).append(new String()).append("abc").toString();

上边三个红色的部分,就是三个String对象。注意:不要把String对象与String的引用相混淆。

justinavril 2009-11-18
  • 打赏
  • 举报
回复
回71# 是4个 对象不一样 但是你的代码不能证明他们是不一样的 因为String是不可变的 但是这两个不一样的字符串是指向同一个字符数组的
安小寰 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 imasmallbird 的回复:]
引用 47 楼 annchaling 的回复:
引用 46 楼 liuhw_job 的回复:
三个
"abc"----->1个
new String()--->1个
new String()+"abc" ---->1个

你的意思是String str不是一个对象咯,意思说str和new String()+"abc"是同一个对象了。
那好,现在我们假设有2个String对象引用
Java codeString str1=new String()+"abc";
String str2= str1;
str1="a";
System.out.println(str1);
System.out.println(str2);
那么按照你的想法既然str1和new String()+"abc"是同一个对象,那么在接下来我让str2指向str1,然后改变str1的指向,既然你说str1和new String()+"abc"是同一个对象,那么请你来解释一下既然我改变了同一个对象的值(引用),为什么str2的指向依然为str1指向改变之前的对象,按你说的改变了同一个对象那么应该对象被改变了才是

你要记住,JAVA字符串是不可变的
str2指向str1是将之前str1指向对象的地址给了str2
str1="a";是将str1指向了常量池中的"a",只是改变了str1引用的值,而不是改变了原有的对象内容,此时str2并没有被改变
[/Quote]
汗,你也说str1指向了内存中的已有对象,那难道你的str1和str2就不是对象了,我没有说str1改变对象内容,我只是来回答我之前引用的那位仁兄的str和在内存中的那个new String()+"abc"是同一个对象的结论而已。
就是4个,一旦String str,就会在内存中生成一个String类型的对象,和他所指向的String对象不是同一个。
pywepe 2009-11-18
  • 打赏
  • 举报
回复
基本上没有什么实际意义的问题

pywepe 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 spiniper 的回复:]
又是一个这样的鸟问题,难道你们不能先去了解一下jdk编译器和java字节码么?
问这种问题有什么意义呢,就像问回字几种写法,了解原理不就可以了,一天到晚刻意的追着这个无聊的问题探讨以此来显示自己博学的可笑心里。
[/Quote]


顶顶 你
nbe01 2009-11-18
  • 打赏
  • 举报
回复
个人认为是3个。。。有两个是临时创建的吧?应该。。
vkbai 2009-11-18
  • 打赏
  • 举报
回复
首先,String是不可变的,因此一旦有新的String就会生成一个对象,再加上字符串也是对象,所以楼主问题的答案是----4
vkbai 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 lijinmian 的回复:]
"abc"不是创建的对象算是常量吧
[/Quote]
字符串常量也是对象!
quansheng2580 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 lijinmian 的回复:]
"abc"不是创建的对象算是常量吧
[/Quote]

建议你好好学习一下JAVA基础吧
smallbear923 2009-11-18
  • 打赏
  • 举报
回复
标记,等待答案~
quansheng2580 2009-11-18
  • 打赏
  • 举报
回复
3个
1 abc
2 ""
3 str
lijinmian 2009-11-18
  • 打赏
  • 举报
回复
"abc"不是创建的对象算是常量吧
ZangXT 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 justinavril 的回复:]
针对我52#的回复 以及我之前的回复,我发现我被绕晕了!!!吃饱了饭不能回答这类问题。现在,我把最终表述说一下:

new String() 产生1个String对象 在heap中
"abc"产生1个对象 在字符串池中
new String() + "abc" 产生1个String对象 在heap中
关键是这个str的引用是不是一个对象,这里是我搞错了 (也是我一开始搞对的,然后被人问了一句就又搞错了),回答是str和new String()+"abc"是2个对象,都在heap中。两者唯一相同的地方是它们的字符数组是一样的。所以47#不好意思,是我错了,但是你的例子是无法说明你的论点的。

因此一共4个String对象在内存中。
[/Quote]
这种问题说不清楚的,呵呵。
加载更多回复(54)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧