Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串和整数与等于进行比较_Java_String_Integer - Fatal编程技术网

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));