我有以下代码:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
Integer foo = new Integer(1);
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
结果如下:
2. true
但是将整数对象
的类型更改为int
将产生不同的输出,例如:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
int foo = 1;
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
新的输出:
1. true
2. true
怎么会这样?为什么第一个示例代码没有输出1。是否正确
?
Integer==此处应用了自动装箱(因此在比较之前Integer转换为int),因此为true。。但是Integer==此处的Integer对象比较,因此引用不同,因此为false。。
整数对象是对象。这听起来合乎逻辑,但却是问题的答案。对象在Java中使用new
关键字生成,然后存储在内存中。比较时,比较对象的内存位置,而不是对象的值/属性。
使用。equals()
方法,实际上比较对象的值/属性,而不是它们在内存中的位置:
new Integer(1)==new Integer(1)
返回false
,而new Integer(1)。等于(新整数(1))
返回true
。
int
s是java的一种基本类型。创建int时,引用的只是值。在Java中比较任何基元类型时,所比较的只是值,而不是内存位置。这就是为什么5==5
总是返回true。
将整数
对象与基元类型进行比较时,如果可能,该对象将强制转换为基元类型。使用整数
和int
这是可能的,因此可以对它们进行比较。这就是为什么Integer(1)。等于(1)
返回true。
对于引用类型,=
检查引用是否相等,即它们是否指向同一个对象。
对于基本类型,=
检查值是否相等。
java。lang.Integer
是一种引用类型int
是一种基本类型。
编辑:如果一个操作数为基元类型,而另一个操作数为引用类型,且未绑定到合适的基元类型,=
将比较值,而不是引用。
我正在用下面的代码比较两个整数对象....为什么输出是“Both Integer are not equal...”虽然我在某处读到过,Integer或int将只在-128到127的范围内相等。为什么不是128?
上述情况导致 上述条件返回。 为什么会这样?这些片段之间有什么区别?
如果两个集合包含相同的对象,如何进行比较? 当然会打印出假的。
我发现了一个有趣的事实,但我不知道是怎么发生的。
如果两个集合包含相同的对象,如何进行比较? 当然会打印错误。
我正在尝试创建一个二进制搜索程序,该程序可以使用各种类型的变量(int、float、string等)来查看数组中是否存在元素。我正试图找出如何比较变量。下面是我正在使用的内容的草图: 我甚至不确定使用对象是否是最好的方法。