在值和对象的比较上,经常会遇到到底是使用equals还是==的困惑,下面说下自己在工作上的总结和体会,供交流学习,不足之处还请指出,先看一个例子
int a = 3;
int b = 3;
String stra = new String("iteye");
String strb = "iteye";
System.out.println(a == b);
System.out.println(stra == strb);
System.out.println(stra.equals(strb));
返回的结果为:true false true,
可能有的小伙伴会有疑问,stra和strb不是一样吗,为啥stra==strb会返回false呢?下面就进行说明
1.==
a==b返回为true,很好理解,a和b的值都为3,肯定是相等的,但是为什么stra==strb就返回false了呢?要理解这一点,首先要理解基本数据类型和非基本数据类型的区别。
在Java中游8种基本数据类型:
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值"true"和"false")
对于这8中基本数据类型的变量,变量存储的都是值本身,所以只要值相等,使用==进行比较始终返回true。而对于非基本数据类型的变量,又称为引用类型变量,引用类型变量存储的并不是值本身,而是存储的与其关联的对象在内存中的地址,有点类似于C/C++里面指针的概念。
对于String stra;声明了一个引用类型的变量,此时并未与任何对象关联,而通过new String("iteye");产生了一个对象,此时stra即关联到了该对象上,此时stra中存储的就是它所指向的对象在内存中存储的地址信息,并不是值本身,也就是说不是存储的字符串"iteye"本身,因此使用==进行比较时,返回的结果为false。
2.equals
equals方法是基类Object中的方法,因此对于继承Object的类都存在该方法,如果在类中没有对equals方法进行重写,则默认使用的都是Object类的equals方法。equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。对于像String、Double、Integer、Date等都对equals方法进行了重写,所以调用这些类的equals方法,实际比较的是引用所存储的变量值。
总结:
1)如果==比较的变量是基本数据类型,则比较的是变量值本身是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。
2)equals方法不能作用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所关联对象在内存中的地址;如果对equals方法进行了重写的话,比较的是所指向的对象的内容。
相关推荐
Java 中 equals 和 == 的区别 ...equals 和 == 是两个不同的概念,equals 比较的是对象的内容,而 == 比较的是对象的地址。在编程中,正确地使用 equals 和 == 是非常重要的,以避免程序中的错误和bug。
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的运算符,它们之间的区别是非常重要的。 首先,我们需要了解 Java 中的内存模型。在 Java 中,变量可以分为两种:基本类型(primitive type)和...
Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的区别,并通过实例代码来加深...
本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...
- **适用性**:`==`适用于基本类型和引用类型的地址比较,而`equals`主要适用于对象的内容比较。 - **行为**:`==`比较的是内存地址,而`equals`在某些类中比较的是对象的状态(内容)。 - **性能**:通常来说,`==`...
Java 中equals和==的区别
在上面的例子中,str1 和 str2 是两个字符串对象,equals 方法比较的是它们的值,因为它们的值相等,所以输出“对象 str1 和对象 str2 的值相等”。 == 运算符比较的是变量的值或内存地址,而 equals 方法比较的是...
【Java面试题】equals与==的区别
java中equals和==的区别-5页.pdf
在Java编程语言中,`equals()` 和 `==` 都用于比较对象,但它们的用法和含义有所不同。本文将详细解析这两个操作符在Java中的区别,并通过具体的例子进行阐述。 1. `==` 操作符: `==` 在Java中主要用来比较基本...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...
在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象的两种不同方式,它们在处理不同类型的数据时有不同的行为。了解这两者的区别对于编写正确的代码至关重要。 `==`运算符: 1. `==`用于比较基本类型的...
在Java中,比较两个对象是否相等时,经常使用到的运算符有"=="和"equals"。虽然两者都可以用于比较,但它们有着本质的区别,特别是在比较对象和基本数据类型值时。 首先,我们来了解"=="运算符。在Java中,"==...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...
在Java中,`equals()`方法和`==`运算符都是用来比较对象的,但它们的比较方式不同。`==`运算符用于比较基本类型(如int,char)的值是否相等,对于引用类型,`==`比较的是两个引用是否指向内存中的同一个对象。而`...