关于String创建了多少个对象
2016-11-27 21:04
183 查看
String创建对象时系统会自动创建一个字符串缓冲池,在你进行如
创建了一个对象
由于s1创建时”abc”字符串已经被放入缓冲池,所以当s2创建的时候是不会产生一个新的对象,他们的引用都会是同一个。
创建了两个对象
这里由于s2用的是new,所以系统会分配一个新的引用地址给s2不会使用s1的引用地址。
创建了一个对象
这里由于使用了intern()方法(调用该方法返回一个字符串,内容与调用该方法的字符串的内容相同,但保证来源于缓冲池中,如果池中没有于该字符串相同的字符串就将该String对象放入池中,并且返回该对象的引用)
创建了一个对象
赋值符号右边的”a”、”b”、”c”都是常量。对于常量,编译时就直接存储它们的字面值而不是它们的引用,在编译时就直接将它们连接的结果提取出来变成了”abc” ,该语句在class文件中就相当于String s = “abc”,然后当JVM执行到这一句的时候, 就在String pool(字符串缓冲池)里找,如果没有这个字符串,就会产生一个。
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(字符串缓冲池)里找,如果没有这个字符串,就会产生一个。
相关文章推荐
- 关于Java String对象创建问题解惑
- 看到的强大的分析贴关于String对象的创建以及管理(学习了)
- 关于String s = new String("xyz")创建几个对象
- 关于Java String对象创建问题解惑
- 关于创建String对象过程的内存分配
- 关于“ String s = new String( "xyz "); ”创建了几个对象的问题。
- String,到底创建了多少个对象?
- String,到底创建了多少个对象?
- String,到底创建了多少个对象?
- String到底创建了多少对象
- 关于String创建对象的问题
- 关于Java String对象创建问题解惑
- 关于String字符串对象的创建与管理(String pool测试)
- 共创建了多少个对象:String s="a"+"b"+"c"+"d";
- 关于Java String对象创建的几点疑问
- 关于String创建对象时的个数、堆栈等问题搜集
- 关于String创建几个对象的问题
- String,到底创建了多少个对象?
- 关于String s = new String("xyz"); 创建几个对象的问题
- 关于创建String对象过程的内存分配