String类中的value属性保存着String对象的值,是一个char类型的数组,执行 String a="abcd"时(假设字符串池中还不存在这个对象),JAVA虚拟机会在栈中创建四个char型的值'a','b','c','d',然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char型值组成的数组{'a','b','c','d'},最后这个新创建的String对象会被添加到字符串池中。由于"a" "b" "c" "d" 都是具体确定的字符串类型的值,所以在编译阶段 "a"+"b"+"c"+"d" 的结果已经确定,等价于“abcd",所以 执行 String s="a"+"b"+"c"+"d"; 和 String a="abcd"; 创建过程基本一样,只是多了一次 字符串的连接运算。 如果这样定义:
String b = "b"; 然后 Sring s = "a" + b + "c" +"d",由于b是变量,可能指向不同的字符串类型的值,所以必须到运行阶段才能确定"a" + b + "c" +"d"的值。 |