String a=new String("b"+"c")会创建几个对象?

String a=new String(“b”+”c”)会创建几个对象?

String a=new String(“b”,”c”)会创建几个对象?
String a=new String(“b”+”c”)又会创建几个?为什么?

1.String a=new String(“b”+”c”);
b一个 c一个 b+c一个 a一个 总共四个
1、Java中New出的对象则始终被JVM存放在堆中,创建的字串常量则始终被JVM存放在数据段区常量池中。

2、String是不可变的
String a=new String(“b”+”c”);

字符串常量 “b” 被JVM存放在数据段区常量池中
字符串常量 “c” 被JVM存放在数据段区常量池中
由于String不可变性,”b”+”c” 又生成了一个字符串 被JVM存放在数据段区常量池中
new String(“b”+”c”)对象被JVM存放在堆中

总共四个。

string的不可变性

String a = new String(“Hello”);

String b = new String(“world”);

String c = a + b;//c = Helloworld

首先在栈中有个”a”变量指向堆中的”Hello”对象…
栈中”b”变量指向堆中的”world”对象
当执行到c = a + b;
系统重新在堆中new一个更大的数组出来,然后将”Hello”和”world”都复制进去,然后栈中的”c”指向这个新new出来的数组…
所谓的不可变是指:它没有在原数组“Hello”上进行修改,而是新建了个更大数组进行扩展,也就是说,这时候堆里还是有“Hello”这个对象数组存在的,只不过这个时候”s”变量不在指向”Hello”这个数组了,而是指向了新new出来的数组,这就是和StringBuffered的区别,后者是在原数组上进行修改,改变了原数组的值,StringBuffered不是通过新new一个数组去复制,而是在原数组基础上进行扩展…再让变量指向原数组….

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值