如下程序打印的结果是什么呢?
public class AnimalFarm{
public static void main(String[] args){
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out. println("Animals are equal: " + pig == dog);
}
}
false:
先拼接"Animals are equal: " + pig得到新的字符串,然后在比较==
如果代码这样写:
public class AnimalFarm{
public static void main(String[] args){
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out. println(pig == dog);
}
}
返回的也是false,因为 pig.length() 是要经过运算得出来的,他不是字面值常量。所以 pig.length() 和 字面值常量 "length: 10"的拼接运算,要在堆中进行。
然而,pig 指向的是方法区中字面值常量的地址, dog 指向的是堆中, pig.length() 和 字面值常量 "length: 10"拼接 后得到的String对象的地址。 所以返回false