“怎么做?”;如果(新整数(1)=新整数(1))“;用Java工作?
我需要对其进行编码/实现,以便此测试:“怎么做?”;如果(新整数(1)=新整数(1))“;用Java工作?,java,Java,我需要对其进行编码/实现,以便此测试: if(new Integer(1) == new Integer(1)) return true; 将返回真值 Java编译器是否有任何接口用于包装类获取它们的值并进行比较 或者简单地说:如何检查某个对象>其他对象(用户定义的对象,但不是由某个原始值/包装类定义的对象)?它在Java中不起作用: //door is a class and the constructor takes length, breadth, width if(new Door(1
if(new Integer(1) == new Integer(1)) return true;
将返回真值
Java编译器是否有任何接口用于包装类获取它们的值并进行比较
或者简单地说:如何检查某个对象>其他对象(用户定义的对象,但不是由某个原始值/包装类定义的对象)?它在Java中不起作用:
//door is a class and the constructor takes length, breadth, width
if(new Door(10,10,10) == new Door(10,10,10))
您可能会对自动装箱感到困惑,因为自动装箱将重用对象以获得较小的值(具体范围取决于具体的实现-请参阅本部分的底部):
new
操作符始终返回对新对象的引用,因此new…==新建…
将始终计算为false
Java中不能重载运算符-通常,对于相等比较,应该使用equals
(您可以在自己的类中重写和重载)并实现排序,然后使用compareTo
,=
将比较“对象引用”的值,而不是“对象值”本身
这将帮助您了解比较在java中是如何工作的,以及如何实现所需的内容。查找实现equals和hashCode。在java中,运算符重载不可用。
==并不总是适用于Integer,您需要小心。大多数参考资料都不一样。(这只适用于-128和127之间的值)@marounnaroun:它只保证在-128和127之间工作。作为一个实现细节,它可能适用于更大的值。@JonSkeet感谢您的澄清!很好,但是仍然使用equals()java表示它们相等/不相等,但不会表示它们(obj1、obj2)是否更大less@user2419836:这就是为什么我说您需要实现Comparable
并调用compareTo
@user2419836,这完全取决于您如何实现equals()
和hashcode
。我们将如何识别一个对象大于或小于另一个对象。如果该对象不是包装类(如门)@RaviTrivedi:您不能使用equals
进行排序。仅仅因为你知道两个值不相等并不意味着你知道哪个值比另一个值“小”。嗯,=
比较值,对象的值是它的引用(而不是对象中的基础数据)。这就是为什么Java是“按值传递”的,但却到处抛出对象引用()。这里的“对象”指的是“非原语”,我也指的是“非原语”。请通读我之前评论中链接问题的答案。是的,原语和非原语都包含数字值。对于非原语,您得到的是对象hashcode(非实数值)。在原语的情况下,你会得到真正的值。
if (new Integer(1) == new Integer(1)) {
System.out.println("This will not be printed.");
}
Integer x = 1;
Integer y = 1;
if (x == y) { // Still performing reference equality check
System.out.println("This will be printed");
}