当前位置: 首页 > 知识库问答 >
问题:

为什么有时不能用“==”关系运算符代替。equals()方法来比较对象?[副本]

孙文康
2023-03-14

我在一本书里查过,通常比网站的解释更透彻。

拿这个来说。:

if (nickname == "Bob")

只有当nickname引用相同的字符串对象时,条件才为true。

书中指出,组合对象“Bob”的方式也影响到条件是否会对not成立,这一点最让我困惑。

对于例如:

String nickname = "Bob";
...
if (nickname == "Bob") //TRUE

但是如果“bob”是从.substring()方法创建的,则condition将为false。

String name = "Robert";
String nickname = name.substring(0,3);
...
if (nickname == "Rob")//FALSE

我们所写的一切不都是由编译器构造的吗?

共有1个答案

张晔
2023-03-14

你需要明白两件事

String a = "Bob";
String b = "Bob";

System.out.println(a.equals(b));
System.out.println(a == b);

你觉得怎么样?输出是多少?

true
true

干嘛这么做?在永久生成内存中的字符串池中创建的第一个字符串。第二个字符串从池中获取现有对象。

String a = "Bob"; // create object in string pool(perm-gen)
String b = "Bob"; // getting existing object.
String nickname = name.substring(0,3);
 类似资料:
  • 我用一个字段构造了一个类。然后创建了两个对象,并且必须使用运算符和对它们进行比较。以下是我所做的:

  • 问题内容: 我建立了一个领域的课程。然后,我创建了两个对象,我也必须使用运算符对其进行比较。这是我所做的: 问题答案: 比较对象引用,它检查两个操作数是否指向同一对象(不是等效对象,是同一对象)。 如果要比较字符串(以查看它们是否包含相同的字符),则需要使用来比较字符串。 在你的情况下,如果字符串匹配,则确实将两个居中实例视为相等,则: …但是通常,如果你要定义一个类,那么等效性要比单个字段的等效

  • 我知道,如果操作数为整型,运算符将返回类型的prvalue。我还知道,如果操作数是浮点类型,运算符将生成类型的prvalue。 但是为什么要使用三方比较运算符而不是双向运算符(,,,,,)?这会给我带来什么好处吗?

  • 我有一个检查两个变量引用的代码,我遇到了这个有点混乱的情况: 结果是: 我的第一个问题是为什么第一个和第三个引用相等?如果第三个变量等于第二个变量,它应该是,因为它们的对象引用不相等。 当我将值更改为时,我感到困惑,如下所示: 然后结果变成: 为什么会这样?

  • 问题内容: 好吧,我有两个StringBuilder对象,我需要在Java中对其进行比较。我知道我可以做的一种方法是 但这意味着我要创建两个String对象,还有没有更好的方法来比较StringBuilder对象。也许您不需要创建其他对象的地方? 问题答案: 如您所知,继承自,因此仅在将同一对象作为参数传递时才返回true。它并 没有 比较两个内容小号! 如果您查看源代码,您将得出结论,最有效的比

  • 我看到这个问题,就想知道。 忽略了几乎所有语言都必须向后兼容的事实,有什么理由我们不能使用运算符作为关键字和函数,这取决于它是否紧跟括号?这会让语法更难吗? 我想的主要是python,但也像C语言。