String a=new String("b","c")的问题

String a=new String("b","c")会创建几个对象?
String a=new String("b"+"c")又会创建几个?为什么?
谢谢了。。。

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存放在堆中

总共四个。

Understand ?

[code="java"]String a=new String("b","c")[/code]
编译通过了 ???

[code="java"]String a=new String("b"+"c");[/code]
b一个
c一个
b+c一个
a一个
总共四个

String a=new String("b","c");编译失败
String a=new String("b"+"c");两个

注意 "b"+"c" 与 new String("b"+"c") 是两个不同的对象。