在阅读很多文章时,我可以找出==比较两个操作数是否指向同一个对象。==和java中的.equals()
它如何处理原始数据类型。
它比较操作数的值吗?
对于原始数据类型和类,它们的工作原理是否有所不同?
请澄清
在阅读很多文章时,我可以找出==比较两个操作数是否指向同一个对象。==和java中的.equals()
它如何处理原始数据类型。
它比较操作数的值吗?
对于原始数据类型和类,它们的工作原理是否有所不同?
请澄清
“==”运算符实际上是检查字符串对象(obj1和obj2)是否引用完全相同的内存位置。换句话说,如果obj1和obj2对于同一对象只是不同的名称,那么在比较两个对象时,“==”运算符将返回true。
equals()方法实际上的行为与“==”操作符相同 - 意味着它检查两个对象是否引用内存中的相同位置。但是,equals方法实际上是为了比较两个对象的内容,而不是它们在内存中的位置。这意味着如果调用equals()方法来比较2个String对象,那么只要实际的字符序列相等,这两个对象都被认为是相等的。
原始数据类型不能使用equal()进行比较,因为它们不是对象。 int,char可以使用==运算符进行比较。
但是,当您比较float和double时,由于机器中的二进制转换,您可能会得到不同的结果。 因此,比较浮点值时,为了使所有值保持一致,包括特殊的Float.NaN值,Float.compare()是最佳选择。同样适用于double值。
从您的声明中,“==”将引用相同内存位置的对象进行比较。但是什么是原始数据类型,我们没有任何对象。我们只是使用“==”比较原始数据类型的值?不像物体。 – user3163483 2014-10-07 04:34:57
是的,确切地说,对象使用equals()和原语'=='操作符。 – Blackhat002 2014-10-07 05:36:22
对于原始数据类型,应使用==
,这仅仅是比较两个给定参数的值。
对于装箱原始数据类型,例如Long,Double,Integer,应该使用equals
进行比较。如果使用==
,则只比较参照相等性。
因此,当我们比较两个原始数据类型时,==比较操作数值。但是当我们比较两个对象时,==比较引用?这是否正确? – user3163483 2014-10-07 04:23:01
从某种意义上说,您可以将引用看作是对象的内存地址。因此,如果你接受'=='总是比较两个给定操作数的值,你可以认为'=='也可以用来比较两个引用是否指向相同的对象。 – 2014-10-07 04:25:37
基元不是Objects
,因此没有equals(...)
方法。比较基元相等的唯一方法是使用==
运算符。
请注意,比较double
和float
值可能会非常棘手,因为==
。
'=='通常比较参考的等同性,其中“等于”通常比较内容的相等性...在高级别... – MadProgrammer 2014-10-07 04:15:51
对于基本数据类型它是否相同。 – user3163483 2014-10-07 04:17:02
不,原始类型在Java中是“特殊的”,并且没有“equals”方法(或者其他任何方法) – MadProgrammer 2014-10-07 04:17:57