A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。
C.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
D.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。
详述:
①==和equals的实质。
在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。
基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。
java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。
其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。
总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.
②==操作符。专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用==操作符。
Java的基本数据类型为(char,byte,short,int,long,float,double,boolean)。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(对内存),变量本身也占用一块内存,例如Object obj = new Object()变量obj是一个内存,new Object()是一个内存,此时,变量所对应的内存中存储的数据就是对象占用的那块内存的首地址。对于指向对象内存的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
③构造器形成的差别。对于String和Integer来说,由于他们特有的创建对象的方式。使用构造器和不使用构造器得到一个对象,==方法比较所产生的结果是不同的。 String a = “abc”; String b = "abc"; 此时a==b得到结果为true。String a = new String("abc"); String b = new String("abc");此时a==b得到的结果为false。Integer a = 1; Integer b = 1;此时a==b的结果是true。Integer a = new Integer(1); Integer b = new Integer(1);此时a==b得到的结果为false。
通过这一点其实我们也能够更加容易理解==对内存的实际操作,实际执行的是近似于基本类型比较。
分享到:
相关推荐
在C#编程语言中,`==`运算符和`Equals()`方法是两种常见的用于比较对象是否相等的方式,但它们之间存在重要的区别。本文将详细解释这两种比较方式的不同点。 首先,`==`运算符主要用于比较基本数据类型的值是否相等...
"Java中equals、hashcode和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,它们之间的区别是初学 Java 的人很容易混淆的。下面,我们将详细地解释它们之间的区别。 在 Java 中,变量可以分为两种:基本类型...
hashCode() 和 equals() 的本质区别和联系 Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和...
在Java编程语言中,"=="运算符和equals()方法都用于比较,但它们在比较对象时有着不同的含义和用法。本文将深入探讨这两个概念的区别以及何时应该使用它们。 首先,"=="运算符主要用于比较基本数据类型的值,如int...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的...
### hashCode和equals方法详解 #### 一、hashCode方法解析 在深入探讨`hashCode`方法之前,我们需要了解Java集合框架的基本概念。Java集合框架主要包括两大类集合:`List`和`Set`。 - **List**:这是一个有序集合...
C#中Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等,对于相同的基本值类型,==和Equals()比较结果是一样的;由于ReferenceEquals()是判断两个对象的引用是否相等,对于值类型,因为每次判断...
在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象的两种不同方式,它们在处理基本类型和引用类型时有着显著的区别。理解这些差异对于编写正确和高效的代码至关重要。 首先,让我们来看一下`==`运算符。...
此外,`Equals`和`GetHashCode`应满足以下契约: - 如果`a.Equals(b)`为`true`,那么`a.GetHashCode()`和`b.GetHashCode()`应该相同。 - 如果`a.Equals(b)`为`false`,那么`a.GetHashCode()`和`b.GetHashCode()`...
在探讨编程语言C#中,有几个需要明确区分的概念:Equals和==运算符的差异,以及公共变量和属性的区别。在C#语言中,进行对象比较时经常会遇到这两个概念,它们在程序设计中扮演着重要的角色。 首先是Equals和==的...
1. **`equals`方法和`hashCode`方法应保持一致性**:如果两个对象根据`equals`方法是相等的,那么它们的`hashCode`也应该是相等的。这是因为某些集合框架(如`HashMap`)会使用`hashCode`来定位元素,而使用`equals`...
- **传递性**:对于任何非空引用值x、y和z,如果`x.equals(y)`返回`true`并且`y.equals(z)`返回`true`,那么`x.equals(z)`也应该返回`true`。 - **一致性**:对于任何非空引用值x和y,如果在多次调用`x.equals(y)`时...
由于JavaScript的`==`和`===`可能无法满足深度比较的需求,开发者通常会自定义一个`equals`方法。下面是一个简单的示例,用于递归地比较两个对象的所有属性: ```javascript function equals(obj1, obj2) { if ...
在C#编程语言中,等号(`=`)和`Equals`方法是两个常见的用于比较对象的方法,但它们之间存在着显著的区别。理解这些差异对于编写高效、无误的代码至关重要。 1. **等号(`=`):赋值运算符** 等号在C#中主要作为...
Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...
在上面的代码示例中,`price` 和 `amount` 都是整型变量,`price.Equals(amount)` 的调用实际上是通过隐式装箱将整型转换为`System.Int32`对象,然后调用`Equals()`方法进行比较。由于 `price` 和 `amount` 都是100...
"shallow-equals" 是一个专门用于浅层比较的开源库,它为开发者提供了便捷的方式来判断两个数据结构是否在表面级别(即只检查第一层属性)上相同。这个库尤其适用于那些性能敏感的场景,例如在React组件的...
Java 中 equals 和 == 的比较 在 Java 编程中,equals 和 == 是两个常用的比较操作符,但它们之间存在着很大的区别。了解这两者的区别非常重要,因为它直接影响着程序的正确性和效率。 在 Java 中,有两种类型的...