在2和3的情况下,由于
hill + i是运行时语句,因此Compiler无法计算String的值,对于
s1.length()
像这样
String s1 and s2使用编译时间常量,
s1="hill5"并且
s2="hill" + 5记住,分配为文字的字符串是常量,因为
String是不可变的 ,所以不能修改其状态。
因此,在编译时,编译器会说“哦,是的,它们被计算为相同的值,我必须为s1和s2分配相同的引用”。
但是在方法
two()和的情况下
three(),编译器会说“我不知道,可能是我的值可以随时更改,或
s1.length()
随时更改”,这是运行时的事情,因此编译器不会将
two()and
three()方法的s2 放在pool中,
因此,它们是错误的,因为在运行时,一旦正确更改就创建了新对象!



