1、字面量+字面量
以下语句创建了几个对象?
例:String s = "abc" + "def";
答案及原理:1个;编译器已经确定了字符串常量"abcdef"并放入常量池中。
2、字面量+对象+字面量
下列语句一共创建多少个对象?
例:(1)String s1 = "abc";
(2)String s2 = "abc" + s1 + "def";
答案及原理:3个;
(1)创建了"abc"存放于常量池中,s1指向"abc";
(2)"abc"已经在常量池中,故只需再创建"def"和"abcabcdef"存放常量池中,s2指向"abcabcdef"。
3、new String("xxx") + new String("xxx")
下列语句一共创建多少个对象?
String s = new String("abc") + new String("abc");
答案及原理:4个;
(1)JVM首先会创建"abc"存放常量池中。
(2)通过new对象在堆区中创建一个String对象存储"abc"。
(3)因为常量池已经有"abc"了,所以不再在常量池创建,所以只需再通过new对象在堆区创建一个String对象存储"abc"。
(4)最后在堆区创建对象存储"abcacb"。
4、new String("xxx") + 字面量
下列语句创建多少个对象?
String s = new String("abc") + "def";
答案及原理:4个
(1)在常量池中创建"abc"和"def"。
(2)在堆区创建String对象存储"abc"。
(3)在堆区创建String对象存储"abcdef"。