String s="a"+"b"+"c" 创建了几个对象

 我来答
littleboy1994
高能答主

2020-05-30 · 答题姿势总跟别人不同
知道小有建树答主
回答量:398
采纳率:66%
帮助的人:12.2万
展开全部

String s="a"+"b"+"c"创建了0个或1个对象。

以String s = "abc"这种形式创建的字符串语句是存储在常量池中的,所以该语句赋值符号右边的"a"、"b"、"c""都是常量。

如果常量池中有相应的字符串则不创建新的字符串对象,即不重新在常量池中分配空间。因此,如果之前以上述形式创建过"abc"这个字符串,该语句不会再创建对象。

而是直接把结果提出来后就会变成了"abc"。否则,就在常量池中创建一个"abc"的字符串对象,因此该语句是创建了0个或1个对象。

扩展资料

String所引用的语句的特性:

1、int size()const; //返回当前字符串的大小。

2、int length()const; //返回当前字符串的长度。

3、bool empty()const; //当前字符串是否为空。

4、int max_size()const; //返回string对象中可存放的最大字符串的长度。

5、int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)。

wangzhirong57
2012-05-08 · TA获得超过4672个赞
知道小有建树答主
回答量:541
采纳率:0%
帮助的人:828万
展开全部
一共五个,其中四个是临时变量很快就被会垃圾回收。
内存分配地址一: 用来存“a” 对象
内存分配地址二: 用来存“b” 对象
内存分配地址三: 用来存“a”+"b"的临时结果。
内存分配地址四: 用来存"c"
内存分配地址五: 用来存"a+b" + “c”

String s 是对象名,但它并不真正分配地址,只分配了引用,引用(相当于指针指向,在内存中只是一个数字,指向“五”的位置) ,所以S只是名字而己,并不具备真实的内存分配。 就好像,一个人己经存在,名字只是名字,不是人本身:

举个例子,现在有a,b,c 三个人。
我们至少得为a,b,c三个人分配内存空间来存放这三个对象,这是没有疑问的。
现在 a和b 想联合起来成立一个班集体, 所以我们需要修建一个新的内存(班集体)来定义这两个人的存在。
然后C决定创建一个更大的集体,把a,b都召进来,所以内存中需要开创一块更大的内存来能同时存下这三个人。

最后,这个最大的集体生成后,我们需要给它取个好听的名字, 就叫S吧。
但S只是一个名字, 没有必要给他分配一间教室。

最后,BS一下那些叫一个的同学,哈哈,怎么也不可能是一个对象,哈
你说四个的话还有可能靠边了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
56321956
推荐于2018-02-28
知道答主
回答量:12
采纳率:0%
帮助的人:9.5万
展开全部
就创建了一个
赋值符号右边的"a"、"b"、"c"、"d"、"e"都是常量
对于常量,编译时就直接存储它们的字面值而不是它们的引用
在编译时就直接讲它们连接的结果提取出来变成了"abc"
该语句在class文件中就相当于String s = "abc"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fuyunzheyan
推荐于2016-04-15 · TA获得超过249个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:146万
展开全部
一个;
个人理解为它相当于字符串合并成一个字符串相当于(String s1= "abc");
如下例子看到它hashCode码值一样的
public class T {
static String s= "a"+"b"+"c";
static String s1= "abc";
public static void main(String[] args){
System.out.println(s.hashCode());
System.out.println(s1.hashCode());
}

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enolong
2012-05-08 · TA获得超过1174个赞
知道小有建树答主
回答量:590
采纳率:100%
帮助的人:371万
展开全部
我用下面的代码为你解释,我是利用debug模式去看这三个String的value的id:
代码如下:
String s = "a" + "b" + "c";
String s1 = "abc";
String x = "ab";
String s2 = x+"c";
debug的结果如下:
s "abc" (id=44)
count 3
hash 0
offset 0
value (id=50)
[0] a
[1] b
[2] c
s1 "abc" (id=44)
count 3
hash 0
offset 0
value (id=50)
[0] a
[1] b
[2] c
x "ab" (id=52)
count 2
hash 0
offset 0
value (id=53)
s2 "abc" (id=59)
count 3
hash 0
offset 0
value (id=60)
其中:s和s1的value的id都为50.x的value的id为53,s2的value的id为60
说明了,s和s1是同一个对象,而s2的value虽然和s,s1一样,但是在内存中地址不一样。因此,s2是new出来的对象。
由此完全可以确定String s="a"+"b"+"c"和String s = “abc”是同一个道理。
只有一个对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(12)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式