问题描述
在 Java 中使用“==”运算符比较两个字符串时,我们知道我们正在比较对象在内存中的地址。但是我们也知道在 Java 中确实存在字符串池,因此字符串文字产生的值将被池化。 在如下情况下,布尔值 check1、check2 和 check3 在我看来都是一样的:
String a = "a";
String b = "b";
String ab = "ab";
boolean check1 = (a + b == "ab");
boolean check2 = (a + b == ab);
System.out.println( check1 ); // false NO POOL
System.out.println( check2 ); // false NO POOL
String s1 = "hello" + " web";
String s2 = "hello web";
boolean check3 = ( s1 == s2 );
System.out.println( check3 ); // true POOL
然而,check1 和 check2 为假,check3 为真。
我发现的原因是,在上次检查中,Java先将两个值连接起来,然后再检查字符串池,然后意识到该值已经存在池中并分配引用。
而 check1 和 check2 为假,因为 a + b 在内存中创建了一个新对象。
但为什么 Java 对这两种操作的处理方式不同?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)