用等号比较String和Integer

时间:2013-07-09 10:56:47

标签: java string integer

以下代码的输出为false

String str = "3456";
String str1 = "3456";
System.out.println(Integer.valueOf(str).equals(str1));

我不明白。我以为它会返回true。在我为SCJP做准备时,理解它背后的原因可能会有所帮助。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:13)

Integer永远不会equalString

这两个类都有非常严格的equals()定义,接受各自类型的对象。

  • Integer.equals()

      

    当且仅当参数不是nullInteger对象且包含与此对象相同的int值时,结果才为真。

  • String.equals()

      

    当且仅当参数不是nullString对象时,结果才为真,该对象表示与此对象相同的字符序列。

这实际上是实现equals()的一种非常常见的方式:只有同一类(有时是子类)的对象才能相等。其他实现是可能的,但是例外。

一个常见的例外是集合such as List:与任何其他实现相比,遵循约定的每个List实现都会返回true,如果它有相同内容的顺序相同。

答案 1 :(得分:2)

通常,在实施equals()时,要做的第一件事就是检查对象是否属于同一类型。

public boolean equals(Object obj) {
    if (!(obj instanceof SomeType)) return false;
    ...
}

此问题也适用于IntegerString类,这些类会回答您为什么会收到false的问题。

答案 2 :(得分:1)

equals()方法的一般契约声明(除其他外)被比较的对象需要属于同一个类。这就是为什么你永远无法将苹果与橘子进行比较的原因。

有关equals()方法的完整合约,请参阅javadocs。

答案 3 :(得分:0)

整数对象不能与String Object对等

使用:

boolean a = str.equals(str1);

OR

boolean a = (Integer.parseInt(str) == Integer.parseInt(str1));