string.toUppercase()在堆或字符串池中创建了一个新对象

时间:2017-09-25 05:17:34

标签: java string uppercase

如果我们使用String类的toUpperCase()方法,它是否将对象放在堆中而不是在String池中创建它。下面是代码,当我运行时,我可以推断出新创建的字符串对象不在String池中。

public class Question {
    public static void main(String[] args) {
        String s1="abc";
        System.out.println(s1.toUpperCase()==s1.toUpperCase());
    }
}

上述代码的输出返回 false 。 我知道“==”和equals()的区别,但在这个问题中,我想知道为什么两个创建的字符串不相等。唯一的解释可能是它们不是在String池中创建的,而是完全是两个不同的对象。

2 个答案:

答案 0 :(得分:2)

Java自动实习字符串文字。检查此answer,但是当您使用toUpperCase()时,它会使用new String()创建字符串的新实例,这就是为什么两个对象都不同。

答案 1 :(得分:0)

“==”运算符比较两个对象引用的值以检查它们是否引用相同的String实例,因此在这种情况下toUpperCase()创建一个新的String实例,这就是它返回false的原因。

另一方面,equals()方法比较String实例中的“”,而不管两个对象引用是否引用相同的String实例,因此它返回true。 / p>