黑马程序员技术交流社区

标题: String字符串 [打印本页]

作者: 风雪边城    时间: 2016-4-27 20:54
标题: String字符串
本帖最后由 风雪边城 于 2016-4-27 20:56 编辑

String s1 = "abc";String s2 = s1 + "c";这过程中建立了几个对象

作者: 东方乔恩    时间: 2016-4-27 21:21
两个对象,是s1和s2各一个
作者: 何海    时间: 2016-4-27 22:18
两个.s1在常量池创建"abc",然后"abc"和"c"组合成"abcc",所以有两个对象
作者: 逆水z行舟    时间: 2016-4-27 23:23
s1  一个abc在常量池;s1+c 在堆内存中创建了一个stringbuffer或stringbuilder对象 然后再通过tostring方法     
最终将地址值赋给s2
作者: sfz6012    时间: 2016-4-27 23:34
那不是3个对象?   常量池2个   堆内存一个
作者: LoveGG    时间: 2016-4-28 00:50
2个字符串对象,
作者: hsy一生戎马    时间: 2016-4-28 01:46
本帖最后由 hsy一生戎马 于 2016-4-28 01:49 编辑

String s1 = "abc";String s2 = s1 + "c";第一个式子中先是在常量池中创建“abc”对象,然后到堆内存中创建s1+“c”对象,共两个
作者: allave    时间: 2016-4-28 11:57
两个对象,一个是常量池中的“abc” 还有一个是在堆内存中创建s1+“c”
作者: 风雪边城    时间: 2016-4-28 22:04
逆水z行舟 发表于 2016-4-27 23:23
s1  一个abc在常量池;s1+c 在堆内存中创建了一个stringbuffer或stringbuilder对象 然后再通过tostring方法 ...

是在堆内存2个对象,一个StringBuffer,一个new String ,还有个常量池的吗?
作者: 东方乔恩    时间: 2016-4-28 22:14
昨天说错了,应该是三个对象吧
常量池一个,stringbuffer一个,string一个吧
作者: 向前_KCmhn    时间: 2016-4-28 22:45
有点汗颜。。。基础班第四天,零基础正在努力夯实基础。
作者: lvdong22    时间: 2016-4-28 22:50
2个对象
作者: lvdong22    时间: 2016-4-28 22:51
2个对象
作者: lvdong22    时间: 2016-4-28 22:53
2个对象
作者: lvdong22    时间: 2016-4-28 22:57
2个对象
作者: 逆水z行舟    时间: 2016-4-28 23:23
风雪边城 发表于 2016-4-28 22:04
是在堆内存2个对象,一个StringBuffer,一个new String ,还有个常量池的吗?

我认为过程中是建立了三个  堆里边两个 常量池一个  仅供参考 我也是刚学基础
作者: mimawo    时间: 2016-4-28 23:31
四个对象
作者: xiaowanghua    时间: 2016-4-29 23:17
两个对象,abc在常量池中,s1+c在堆内存中
作者: 向尧    时间: 2016-5-1 09:23
2个噢  我去  回复还受字数限制
作者: 茫茫然    时间: 2016-5-1 16:51
两个对象
作者: AAAheilong    时间: 2016-5-1 22:02
应该是两个对象,s1是在常量池中建立,而s2准备赋值时发现s1是引用数据,自然就在堆内存中创建一个对象,然后将字符串连接后的地址值赋值给s2!希望能帮到你!
作者: 茫茫然    时间: 2016-5-1 22:30
两个,s1和s2!!!!!!!!!!!!
作者: feixiang666    时间: 2016-5-2 02:31
两个对象,s1和s2
作者: 冯领峰    时间: 2016-5-2 17:41
两个,s1那个会存储在常量池里面,如果后面还有一样的就直接调用之前那个,所以是两个
作者: Bruin4Android    时间: 2016-5-2 20:23
2个,一个是"abc",另一个是"abcc",先把"abc"和"
作者: Bruin4Android    时间: 2016-5-2 20:24
2个,一个是"abc",另一个是"abcc",先把"abc"和"c"相加,再赋值给S2
作者: nannanziyu    时间: 2016-5-4 23:47
3个对象
作者: lennycxy    时间: 2016-5-5 08:51
两个吧,我觉得是
作者: taoshan    时间: 2016-5-6 08:03
创建了2个对象,一个是在常量池中的“abc”,在堆内存中创建了一个StringBuffer对象,将他们连接
作者: juncai147    时间: 2016-5-6 11:04
2个,一个是s1,一个是“c”
作者: 等待春天的花朵    时间: 2016-5-7 23:48
一共创建两个对象,s1创建一个,s2创建一个,两个对象都在常量池里面,只有new出来的对象才会在堆内存中,可以定义一个s3="abcc".用s2.equals(s3);这个返回值是true,而s3是在常量池的,通过返回值就可以判断s2和s3指向的是一个地址,所以s2在常量池中创建一个对象.
作者: 18735346124    时间: 2016-5-8 11:28
3个,"abc"是一个,"c"是一个,    这两个是在常量池,s1+"c"又是一个,堆内存
作者: 一直在    时间: 2016-5-8 23:58
两个。s1 .s2 是用分号分开的。他们是并列关系,不是从属关系。
作者: 代码是什么    时间: 2016-5-9 00:07
常量池 堆内存

作者: 陈军舰    时间: 2016-5-9 22:07
两个对象,一个是在常量池中的“abc",另一个是在常量池中的"abcc".而str1是在栈中的变量指向“abc",str2是在栈中的变量指向“abcc",最后说一声,兄弟你太抠了,忙了半天,就悬赏一个币!!!
作者: 一架飞机CE3    时间: 2016-5-12 21:41
两个啊 s1一个 s2一个
作者: 一米阳光`·`    时间: 2016-5-15 15:22
2个对象啊
作者: 天真不穿鞋    时间: 2016-5-15 18:02
三个    常量池里"abc"  "c"各一个对象   堆内存创建了一个StringBuilder对象
作者: 天真不穿鞋    时间: 2016-5-15 18:04
三个,常量池里"abc"  "c"各一个对象,堆内存创建了一个StringBuilder对象
作者: 爱上你的微笑    时间: 2016-5-24 00:20
我感觉是3个,s1和s2分别会在常量池中建立,s2由于和字符串相加,所以在堆中会建立Stringbuffer对象
作者: 车前子008    时间: 2016-5-26 16:22
String s1 = "abc";建立第一个对象....String s2 = s1 + "c"中,s1已存在,c为一个对象  ,s2为一个对象,总共是3个对象.多看看堆栈,静态区等方面的数据结构  就会了
作者: 换一个昵称    时间: 2016-5-27 00:28
两个对象,一个在方法区常量池s1,一个在堆内存中s2
作者: cofujun    时间: 2016-5-27 21:55
两个对象,“abc”和 “abcc”,都在常量池中,s1指向“abc”,s2指向“abcc”
作者: cofujun    时间: 2016-5-27 21:56
两个对象,“abc”和 “abcc”,都在常量池中,s1指向“abc”,s2指向“abcc”
作者: cofujun    时间: 2016-5-27 21:58
两个对象,“abc”和 “abcc”,都在常量池中,s1指向“abc”,s2指向“abcc”
作者: 逝水大魔王    时间: 2016-5-29 00:19
两个对象,均 s2  和  后面的s1   前面的s1是常量池的地址值,和后面的s1是不相同的
作者: 逝水大魔王    时间: 2016-5-29 00:28
两个对象,均 s2  和  后面的s1   前面的s1是常量池的地址值,和后面的s1是不相同的
作者: chengxiankun    时间: 2016-6-3 23:27
几个变量几个对象
作者: Realize    时间: 2016-6-13 22:22
4个,4,4,4
作者: 644313561    时间: 2016-6-16 22:26
两个对象啊
作者: lizihanglove    时间: 2016-6-18 00:24
两个,常量池中存储。
作者: demon凯    时间: 2016-6-20 10:52
两个对象啊    这个字符串拼接的+号   在底层是  StringBulider    通过append方法拼接的
作者: 阳光中的雨    时间: 2016-6-23 22:55
两个对象 在常量池创建"abc"
作者: 阿卜    时间: 2016-7-1 13:11
2个,一个是“abc”,一个是 “abcc”。如果你再加一句println(s1 + s2)就是3个了。
作者: linguoqun    时间: 2016-7-25 01:51
楼主,你好。
你给出的题目是:String s1 = "abc";String s2 = s1 + "c";
现在为您分析该题目:
分号代表语句的结束,首先我们看第一句代码,String s1 = "abc";等号左边声明了一个字符串变量s1.因为是赋值语句,所以这句代码是意思是将字符串abc赋值给变量s1."abc"是一个字符串,cpu会先看常量区是否已经存在字符串常量"abc",如果已经存在,则不创建,直接把地址传给变量s1,s1指向该字符串。如果常量区中找不到该字符串"abc",那么会在常量区中创建该字符串,然后再把地址传给变量s1,让s1变量指向它。(这里有可能不创建对象,有可能创建一个。)
第二句:String s2 = s1 + "c";同理,先在常量区查找是否已经存在字符串常量"c",如果有,则不创建,如果没有,则创建。(这里有可能不创建对象,有可能创建一个)。然后将s1与“c”的值相加,相加后的结果又会创建一个在常量区创建字符串对象。
所以,综上所述:建立的对象是:最少一个,最多三个。
纯手打的,满意请采纳,谢谢!
作者: Fate_stay    时间: 2016-9-9 01:04
2个对象,s1和 s2
作者: cjc147    时间: 2016-9-9 01:10
“abc”是一个对象,“c”是一个对象是
作者: fulq1234    时间: 2016-10-17 12:14
两个对象。
字符串的对象池,一个是"abc"。一个是"abcc"




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