1.String a="b",Stirng b="b";创建了几个对象??
2.String a=new String("a"+"b");创建了几个对象??
1,String a="b",Stirng b="b";创建了几个对象??
堆内有一块区域我们称之为字符串缓冲区,String a ="b"去堆内的字符串缓冲区找,是否存在"b"没有就建立"b"然后存储进缓冲区,当到String b = "b";因为缓冲区内已经有了"b"便不再创建.
2.String a=new String("a"+"b");创建了几个对象??
先在堆内建立1个,然后再去字符串缓冲区存储"ab"
String a = new String ("a"+"b"); +字符串连接符,通过JVM自动转成"ab"
堆和字符串缓冲区有什么关系呢?堆是分区域执行操作的,堆内为其开辟了空间,String a = new String ("a"+"b"); 会先在堆内new 出对象,然后把"ab"拿到缓冲区再做比对,如果无这个字符串, 便创建并且存储,那么答案显而易见了,
另画图说明
|
|