据我所知==基本上比较了内存位置,所以我完全理解第1行返回true。但是我们没有在类中重写等于的方法,那么为什么第2行返回true?
private String category = "procedura1";
public static void main(String[] args) {
Lang obj1 = new Lang();
Lang obj2 = new Lang();
if (obj1.category == obj2.category) { /// Line 1
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
if (obj1.category.equals(obj2.category)) { /// Line 2
System.out.println("Equal");
} else {
System.out.println("Not equal");
}
}
为什么以下第3行返回false?
String a1 = new String("String 1");
String a2 = new String("String 1");
if (a1 == a2) { // Line 3
System.out.println("True");
} else {
System.out.println("False");
}
if (a1.equals(a2)) {
System.out.println("True");
} else {
System.out.println("False");
}
答案 0 :(得分:2)
category
属于String
类型,使用String equals()
实现。
答案 1 :(得分:0)
这是因为您完全忽略了自定义对象并转到定义了equals
方法的字段。
如果您正在做这样的事情:
if(obj1.equals(obj2))
...如果在equals
上未定义Lang
,您就会遇到问题。但是,正如我们所知,equals
确实是在String
上定义的,所以你会发现它工作正常。
这当然是假设category
实际上是 String
;我现在只推断它。
答案 2 :(得分:0)
category
字段的值是一个String literal ,它是interned,因此每个实例的类别都引用相同的 String对象因此根据==
它们是相等的。
equals()
的合同是,当它自己被调用时它返回true,并且你可以依赖JDK中遵守这个合同的类。
答案 3 :(得分:0)
这是真的,因为你基本上比较了两件事物......这相当于:
public static void main(String[] args) {
String str1 = "procedura1";
String str2 = "procedura1";
if (str1.equals(str2)) {
System.out.print("Both String objects represent the same sequence of characters");
}
}
但如果你可以比较一下,那就是:
public static void main(String[] args) {
Lang obj1 = new Lang();
Lang obj2 = new Lang();
if (obj1.equals(obj2)) {
System.out.println("Both Lang objects are equal.");
}
}
你不会得到任何消息..希望这有帮助;)