我正在研究获得我的 OCA 考试并坚持这个 java 字符串池概念。
考虑以下几点:
public static void main(String[] args) {
String s1 = "Hello"; // since s1 and s2 are the same literal at compile-time, therefore they will be string pooled
String s2 = "Hello";
String s3 = "Hello".trim();
StringBuilder sb1 = new StringBuilder("Hello"); // although they are the same string, == only checks for object equality
StringBuilder sb2 = new StringBuilder("Hello");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // true
System.out.println(sb1 == sb2); // false
}
s1并且s2在字符串中相同并且在对象中也相同,因为因为它是相同的字符串文字,JVM 将在编译时将字符串池s1和。s2
现在,s3是在运行时计算的,因此应该返回一个新字符串。因此,s1 == s3应该是假的,但事实并非如此。为什么?
我的一个理论是该trim()方法首先检查是否有要删除的空白,如果没有,则简单地返回自身。这可以解释为什么s1 == s3,但我不确定。
慕哥6287543
慕的地8271018
12345678_0001
相关分类