object1.toString() == object2.toString() [重复]
Posted
技术标签:
【中文标题】object1.toString() == object2.toString() [重复]【英文标题】:object1.toString() == object2.toString() [duplicate] 【发布时间】:2015-01-26 23:05:03 【问题描述】:以下是我比较两个对象引用的主要方法。重写了 Car 类中的 toString()
方法后,我的问题是为什么下面的“if”条件在它们应该评估为 true 时评估为 false。有人可以解释一下吗?谢谢。
public static void main(String[] args)
Car c1 = new Car(2829,"white");
Car c2 = new Car(2829,"white");
if(c1 == c2)
System.out.println(true);
else
System.out.println(false);
String sc1 = c1.toString();
String sc2 = c2.toString();
if(sc1 == sc2)
System.out.println("it's equal");
else
System.out.println("it's not!");
public class Car
private int regNo;
private String color;
protected void start()
System.out.println("Car Started!");
public Car(int regNo, String color)
this.regNo = regNo;
this.color = color;
@Override
public String toString()
return "Car-"+regNo;
说,我有两个字符串s1="abc" and s2 = "abc"
。现在,s1 == s2
评估为 true 那么为什么在上面的代码中 c1.toString() == c2.toString()
评估为 false 是我的问题?
【问题讨论】:
因为使用equals
。
这个问题的第二部分是重复的:***.com/questions/16729045/…
【参考方案1】:
好吧,因为==
比较引用和
-
引用 c1 与 不一样 c2
c1.toString().equals(c2.toString())
是比较字符串的正确方法。
【讨论】:
好吧,我知道 equals() 是比较的正确方法,但是当下面的评估为真时,为什么上面的不是?字符串 s1 = "abc";字符串 s2="abc"; s1==s2 - 计算结果为真 字符串是不可变的对象,任何修改都会创建一个新实例(如您的 toString() 方法)。 @Jsm - 默认情况下,在 object 级别,==
和 equals()
比较引用。所以,他们会返回false
c1 is not c2。您必须覆盖 equals()
,然后更改其默认 实现,然后使用c1.equals(c2)
。对于字符串,equals()
已经实现(覆盖),因此,.equals()
比较 contents 的 2 个 不同 字符串实例。
> 字符串 s1 = "abc";字符串 s2="abc"; s1==s2 因为 "" 不创建新字符串,而是使用字符串池化。以上是关于object1.toString() == object2.toString() [重复]的主要内容,如果未能解决你的问题,请参考以下文章