java中关于“==”和“equals()”方法的区别
2017-08-18 12:06
465 查看
我们想要说清楚java中“==”操作符和
“equals()”方法的区别,就先来单独谈谈,当我们把它俩分别说清楚了,区别自然就出来了。
总结:
“==”操作符:
a\基本数据类型:比较值是否相等;
b\对象数据类型:比较变量是否指向同一个对象(变量地址值是否相等)。
equals方法:
对象数据类型:比较对象的内容是否相等。
------------------------------------------------------------------------------------------------------------------------------------
这是a和b都是基本数据类型int ,a==b的结果就是true。
当变量指向的数据是对象类型,那么,这个时候数据是存放在两块内存中:
对象本身(new Integer(1))存放在堆内存中,而变量c存放在栈内存中,此时变量c所对应的栈内存中存储的数值就是对象占用的那块堆内存的首地址。
例子:
上面代码,有两个变量c和d,有两个对象,分别是变量c指向对象new Integer(1),和变量d指向对象new Integer(1),第三行代码比较的c==d,是在比较这两个变量是否指向同一个对象,很显然,这是两个对象。随意返回结果是false。
使用堆内存和栈内存图展示如下:
![](http://img.blog.csdn.net/20170818095752282?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTE1OTQxNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
两个new Integer(1);语句分别创建了两个对象,然后变量c和d分别指向各自的对象,因为这是两个对象,所以他们的首地址是不同的,也就是说变量c和d在栈内存中存储的数值是不同的,即c==d是false,但是这两个对象的内容是相同的,都是1,所以c.equals(d)返回的值是true。
我们用人来通俗的解释一下:
“==” 操作符 :比较的是==号左边和右边说的这两个人是不是同一个人。
equals()方法 :比较两个人在逻辑上是否相等(假设我们规定:两个人年龄相同或身高相同就算相等)。
“equals()”方法的区别,就先来单独谈谈,当我们把它俩分别说清楚了,区别自然就出来了。
总结:
“==”操作符:
a\基本数据类型:比较值是否相等;
b\对象数据类型:比较变量是否指向同一个对象(变量地址值是否相等)。
equals方法:
对象数据类型:比较对象的内容是否相等。
------------------------------------------------------------------------------------------------------------------------------------
1、“==”操作符
“==”是操作符,专门用来比较值是否相等。分两种情况---基本数据类型的值 和 对象类型的地址(变量) 来说1)基本数据类型的比较
int a = 1 ; int b = 1 ; System.out.println(a==b);
这是a和b都是基本数据类型int ,a==b的结果就是true。
2)对象的引用变量是否相等比较(也就是比较两个变量是否指向同一个对象)
对象类型代码:Integer c = new Integer(1) ;
当变量指向的数据是对象类型,那么,这个时候数据是存放在两块内存中:
对象本身(new Integer(1))存放在堆内存中,而变量c存放在栈内存中,此时变量c所对应的栈内存中存储的数值就是对象占用的那块堆内存的首地址。
例子:
Integer c = new Integer(1) ;
Integer d = new Integer(1) ;
System.out.println(c == d );
上面代码,有两个变量c和d,有两个对象,分别是变量c指向对象new Integer(1),和变量d指向对象new Integer(1),第三行代码比较的c==d,是在比较这两个变量是否指向同一个对象,很显然,这是两个对象。随意返回结果是false。
使用堆内存和栈内存图展示如下:
2、equals()方法
equals()方法是用于比较两个对象的内容是否相等
例如下面的代码:Integer c = new Integer(1) ;
Integer d = new Integer(1) ;
System.out.println(c.equals(d));
两个new Integer(1);语句分别创建了两个对象,然后变量c和d分别指向各自的对象,因为这是两个对象,所以他们的首地址是不同的,也就是说变量c和d在栈内存中存储的数值是不同的,即c==d是false,但是这两个对象的内容是相同的,都是1,所以c.equals(d)返回的值是true。
我们用人来通俗的解释一下:
“==” 操作符 :比较的是==号左边和右边说的这两个人是不是同一个人。
equals()方法 :比较两个人在逻辑上是否相等(假设我们规定:两个人年龄相同或身高相同就算相等)。
相关文章推荐
- Java中关于==和equal的区别以及equals()方法重写
- Java中关于==和equal的区别 以及equals()方法重写
- 关于java中的Scanner类中的nextLine方法与next方法的区别
- JAVA中==和equals方法的区别
- Java ==运算符与equals方法的区别及intern方法的正确使用
- 关于C#中==与Equals方法的区别总结
- java中equals方法和“==”的区别
- 关于equals()方法和==的区别
- java中String 相关及“==”与equals方法区别
- Java中"=="和equals方法的区别!
- 关于Java中的equals()方法与hashCode()方法
- Java J2SE / 基础类 中关于 为什么要改写java中Object类的equals方法 的 问题
- java中equals方法和“==”的区别
- java中“==”和equals方法有什么区别
- 关于Java equals()方法的几点疑问
- 关于java的equals和hashcode方法
- 关于Java的对象equals方法
- java基础问题----"=="和equals方法究竟有什么区别
- "=="和equals方法究竟有什么区别? —— Java经典面试题系列
- java中equals方法和“==”的区别