gpt4 book ai didi

java - 使用 equal(==) 运算符比较两个字符串

转载 作者:行者123 更新时间:2023-12-04 04:43:33 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





String comparison and String interning in Java

(3 个回答)


7年前关闭。




我有点告诉某人,我们必须使用 String.equals 方法来比较两个字符串值,我们不能简单地在 java 中使用 == 运算符来比较字符串,并告诉他 == 将返回 false 因为它不会比较字符串值和字符串对象引用值。

我写了这个例子给他看,但令我惊讶的是,它总是为 == 运算符打印 true..
这是代码

public void exampleFunc1(){

String string1 = "ABC";
String string2 = "ABC";

if(string1 == string2)
System.out.println("true");
else{
System.out.println("false");

}
System.out.println(" Are they equal "+(string1 == string2)); // this shouldn't print True but it does
System.out.println(" Are they equal "+(string1.equals(string2)));

}

输出:-

它们是否相等

它们是否相等

So question here is in what circumstances == operator on objects can print true, except that both objects are same instance?

最佳答案

String是少数特殊情况之一。

类(class)String保留一个特殊的“实习生”池 String s。方法myString.intern()查找 myString在这个池子里。如果另一个 String如果池中已经存在相同的内容,则返回指向它的指针。如果没有,myString添加(并返回一个指针)。

当你说 myString= myString.intern() ; ,您正在有效地制作 myString引用共享副本或其底层 String可供将来共享(且不得重复)。大多数库方法创建String s 受此约束,尤其是 String文字。

其他“实习”情况发生在包装类型 Integer , Long等。它们没有构造函数,而是静态方法 valueOf()当它们可以时返回预构建的共享对象(通常是最接近零的 256 个值),当它们不能时返回新对象。后者问题不大,因为这些类型比 String 更轻量级。 s。 Long例如,只有 8 个字节的有效载荷。 String包含 char[]即使是空也是 16 个字节左右。

回答您的问题,您不能依靠任何“实习”机制。它们在过去发生了变化,将来可能会发生变化(甚至从一个 JVM 变为另一个),从而使您的代码无法使用。始终使用 equals .

关于java - 使用 equal(==) 运算符比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com