关于String创建了多少个对象

来源:互联网 发布:淘宝宝贝推广网站 编辑:程序博客网 时间:2024/05/05 23:49

String创建对象时系统会自动创建一个字符串缓冲池,在你进行如String str = "a";之类的操作时,系统会先在缓冲池中寻找有没有,如果没有就会创建一个。

String s1 = "abc";String s2 = "abc";

创建了一个对象
由于s1创建时”abc”字符串已经被放入缓冲池,所以当s2创建的时候是不会产生一个新的对象,他们的引用都会是同一个。

String s1 = "abc";String s2 = new String( "abc" );

创建了两个对象
这里由于s2用的是new,所以系统会分配一个新的引用地址给s2不会使用s1的引用地址。

String s1 = "abc";String s2 = new String( "abc" ).intern();

创建了一个对象
这里由于使用了intern()方法(调用该方法返回一个字符串,内容与调用该方法的字符串的内容相同,但保证来源于缓冲池中,如果池中没有于该字符串相同的字符串就将该String对象放入池中,并且返回该对象的引用)

String s1 = "ab"+"c";

创建了一个对象
赋值符号右边的”a”、”b”、”c”都是常量。对于常量,编译时就直接存储它们的字面值而不是它们的引用,在编译时就直接将它们连接的结果提取出来变成了”abc” ,该语句在class文件中就相当于String s = “abc”,然后当JVM执行到这一句的时候, 就在String pool(字符串缓冲池)里找,如果没有这个字符串,就会产生一个。

0 0
原创粉丝点击