string.toUppercase() 在堆或字符串池中创建了一个新对象
string.toUppercase() created a new object in heap or string pool
如果我们使用String class 的toUpperCase()
方法,它是否将对象放入堆中而不是在String 池中创建它。下面是代码,当我运行时,我可以推断新创建的字符串对象不在字符串池中。
public class Question {
public static void main(String[] args) {
String s1="abc";
System.out.println(s1.toUpperCase()==s1.toUpperCase());
}
}
以上代码的输出returnfalse。
我知道“==”和 equals() 的区别,但在这个问题中我想知道为什么两个创建的字符串不相等。唯一的解释可能是它们不是在字符串池中创建的,完全是两个不同的对象。
Java 自动实习字符串文字。检查此 answer,但是当您使用 toUpperCase()
时,它会使用 new String()
创建字符串的新实例,这就是两个对象不同的原因。
“==”运算符比较两个对象引用的值以检查它们是否引用相同的 String 实例,因此在这种情况下 toUpperCase()
创建一个新的 String 实例,这就是它 return 错误。
另一方面,equals()
方法比较 String 实例中的“value”,而不管两个对象引用是否引用同一个 String 实例,等等return是真的。
如果我们使用String class 的toUpperCase()
方法,它是否将对象放入堆中而不是在String 池中创建它。下面是代码,当我运行时,我可以推断新创建的字符串对象不在字符串池中。
public class Question {
public static void main(String[] args) {
String s1="abc";
System.out.println(s1.toUpperCase()==s1.toUpperCase());
}
}
以上代码的输出returnfalse。 我知道“==”和 equals() 的区别,但在这个问题中我想知道为什么两个创建的字符串不相等。唯一的解释可能是它们不是在字符串池中创建的,完全是两个不同的对象。
Java 自动实习字符串文字。检查此 answer,但是当您使用 toUpperCase()
时,它会使用 new String()
创建字符串的新实例,这就是两个对象不同的原因。
“==”运算符比较两个对象引用的值以检查它们是否引用相同的 String 实例,因此在这种情况下 toUpperCase()
创建一个新的 String 实例,这就是它 return 错误。
另一方面,equals()
方法比较 String 实例中的“value”,而不管两个对象引用是否引用同一个 String 实例,等等return是真的。