2014-10-07 73 views
1

在阅读很多文章时,我可以找出==比较两个操作数是否指向同一个对象。==和java中的.equals()

它如何处理原始数据类型。

它比较操作数的值吗?

对于原始数据类型和类,它们的工作原理是否有所不同?

请澄清

+0

'=='通常比较参考的等同性,其中“等于”通常比较内容的相等性...在高级别... – MadProgrammer 2014-10-07 04:15:51

+0

对于基本数据类型它是否相同。 – user3163483 2014-10-07 04:17:02

+0

不,原始类型在Java中是“特殊的”,并且没有“equals”方法(或者其他任何方法) – MadProgrammer 2014-10-07 04:17:57

回答

1

“==”运算符实际上是检查字符串对象(obj1和obj2)是否引用完全相同的内存位置。换句话说,如果obj1和obj2对于同一对象只是不同的名称,那么在比较两个对象时,“==”运算符将返回true。

equals()方法实际上的行为与“==”操作符相同 - 意味着它检查两个对象是否引用内存中的相同位置。但是,equals方法实际上是为了比较两个对象的内容,而不是它们在内存中的位置。这意味着如果调用equals()方法来比较2个String对象,那么只要实际的字符序列相等,这两个对象都被认为是相等的。

原始数据类型不能使用equal()进行比较,因为它们不是对象。 int,char可以使用==运算符进行比较。

但是,当您比较float和double时,由于机器中的二进制转换,您可能会得到不同的结果。 因此,比较浮点值时,为了使所有值保持一致,包括特殊的Float.NaN值,Float.compare()是最佳选择。同样适用于double值。

+0

从您的声明中,“==”将引用相同内存位置的对象进行比较。但是什么是原始数据类型,我们没有任何对象。我们只是使用“==”比较原始数据类型的值?不像物体。 – user3163483 2014-10-07 04:34:57

+0

是的,确切地说,对象使用equals()和原语'=='操作符。 – Blackhat002 2014-10-07 05:36:22

0

对于原始数据类型,应使用==,这仅仅是比较两个给定参数的值。

对于装箱原始数据类型,例如Long,Double,Integer,应该使用equals进行比较。如果使用==,则只比较参照相等性。

+0

因此,当我们比较两个原始数据类型时,==比较操作数值。但是当我们比较两个对象时,==比较引用?这是否正确? – user3163483 2014-10-07 04:23:01

+0

从某种意义上说,您可以将引用看作是对象的内存地址。因此,如果你接受'=='总是比较两个给定操作数的值,你可以认为'=='也可以用来比较两个引用是否指向相同的对象。 – 2014-10-07 04:25:37

2

基元不是Objects,因此没有equals(...)方法。比较基元相等的唯一方法是使用==运算符。

请注意,比较doublefloat值可能会非常棘手,因为==