以下代码的输出为false
String str = "3456";
String str1 = "3456";
System.out.println(Integer.valueOf(str).equals(str1));
我不明白。我以为它会返回true
。在我为SCJP做准备时,理解它背后的原因可能会有所帮助。有人可以帮忙吗?
答案 0 :(得分:13)
Integer
永远不会equal
到String
。
这两个类都有非常严格的equals()
定义,仅接受各自类型的对象。
当且仅当参数不是
null
且是Integer
对象且包含与此对象相同的int值时,结果才为真。
当且仅当参数不是
null
且是String
对象时,结果才为真,该对象表示与此对象相同的字符序列。
这实际上是实现equals()
的一种非常常见的方式:只有同一类(有时是子类)的对象才能相等。其他实现是可能的,但是例外。
一个常见的例外是集合such as List
:与任何其他实现相比,遵循约定的每个List
实现都会返回true
,如果它有相同内容的顺序相同。
答案 1 :(得分:2)
通常,在实施equals()
时,要做的第一件事就是检查对象是否属于同一类型。
public boolean equals(Object obj) {
if (!(obj instanceof SomeType)) return false;
...
}
此问题也适用于Integer
和String
类,这些类会回答您为什么会收到false
的问题。
答案 2 :(得分:1)
equals()方法的一般契约声明(除其他外)被比较的对象需要属于同一个类。这就是为什么你永远无法将苹果与橘子进行比较的原因。
有关equals()方法的完整合约,请参阅javadocs。
答案 3 :(得分:0)
整数对象不能与String Object对等
使用:
boolean a = str.equals(str1);
OR
boolean a = (Integer.parseInt(str) == Integer.parseInt(str1));