Java 将字符串和整数与等于进行比较
以下代码的输出为Java 将字符串和整数与等于进行比较,java,string,integer,Java,String,Integer,以下代码的输出为false String str = "3456"; String str1 = "3456"; System.out.println(Integer.valueOf(str).equals(str1)); 我不明白。我想它会返回true。在我为SCJP做准备时,了解它背后的原因可能会有所帮助。有人能帮忙吗?一个整数永远不会等于字符串 这两个类都有非常严格的equals()定义,只接受各自类型的对象 : 当且仅当参数不是null且是一个整数对象,该对象包含与此对象相同的int
false
String str = "3456";
String str1 = "3456";
System.out.println(Integer.valueOf(str).equals(str1));
我不明白。我想它会返回
true
。在我为SCJP做准备时,了解它背后的原因可能会有所帮助。有人能帮忙吗?一个整数
永远不会等于字符串
这两个类都有非常严格的equals()
定义,只接受各自类型的对象
- :
当且仅当参数不是
null
且是一个整数
对象,该对象包含与此对象相同的int值时,结果才为真
- :
当且仅当参数不是
null
且是表示与此对象相同字符序列的字符串
对象时,结果才为真
这实际上是实现equals()
的一种非常常见的方法:只有同一类(偶尔还有子类)的对象才能相等。其他的实现是可能的,但都是例外
集合是一个常见的例外:与任何其他实现相比,遵循约定的每个列表实现将返回true
,前提是它具有相同顺序的相同内容。equals()方法的通用契约声明(除其他事项外)正在比较的对象需要属于同一类。这就是为什么你永远无法比较苹果和桔子
有关equals()方法的完整约定,请参见javadocs。通常,在实现equals()
时,首先要做的事情之一是检查对象是否属于同一类型
public boolean equals(Object obj) {
if (!(obj instanceof SomeType)) return false;
...
}
这也适用于Integer
和String
类,它回答了为什么会收到false
的问题。整数对象不能与String对象相等
使用:
boolean a = str.equals(str1);
或
为什么两者应该平等?一个是整数
对象,另一个是字符串
对象。这是一个很大的区别。。。一个代表一个数值,另一个代表一系列字符。哦,好的。我现在知道了。但是在这种情况下,不应该用这样的方式来写equals,从而产生编译时错误吗?@Anand:不,这就是为什么equals()
是对象的一种方法:允许您询问两个对象是否相等,不管是什么类型。但是如果类型不同,它将不起作用,即总是返回错误。哪种做法更好?
boolean a = (Integer.parseInt(str) == Integer.parseInt(str1));