Java 中 == 和 equals 的区别
有一段时间,== 和 equals 的区别一直困扰着我。因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解。
== 和 equals 最大的区别就是 它们对比的东西不一样,前者对比的是 栈的一个地址。后者对比的是 栈中的值。不知道我这样说对不对,如果不对的话请指教,谢谢。
String a = "1";
String b = "1";
String c = new String("1");
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a==c);
System.out.println(a.equals(c));
上面这段代码的输出是 true true false true
这样的结果和我的理解相同,首先 声明一个变量 a 并赋值为 "1",在赋值的过程中,程序首先回去String缓冲池中寻找是否有"1"存在,如果发现没有,则新建一个。这时候,
声明了一个变量b,也赋值为"1" ,这时候String缓冲池中有"1",那么这时,b也指向了缓冲池中"1"的地址。这时,变量a和变量b就指向了同一个地址。所以前面两个判断都是
true。在声明第三个变量c的时候,程序写到新建一个存放"1"的内存空间,之前的那个变量c不要了。这时内存空间中就有两个存储"1"的地址,存储的地址不一样,但是值相同,
这就造成了 第三个输出语句为false,第四个为true。不得不说的是,变量c的做法很浪费,在实际开发过程中很少用到。最起码我没用到过,当然,可能是我资历还是不足。
这里,在用两个很形象的比喻来区别 == 和 equals 。 现在我要去肯德基吃午饭,三个同事a,b,c给了我三个不同的路线,于是按照这三条路线我都走了一遍,发现 a和b同事虽然
给了我不同的路线,但是按照路线走下来却是同一家KFC,c同事的路线走下来也是KFC,但是和之前的KFC不是同一家。结果我吃的都是KFC,但是a同事和b同事给的地址是同一家
KFC,c同事则是另一家KFC。
上面这个例子中,吃的是KFC 代表的是值,KFC的地址代表 内存中的地址。虽然吃的都是KFC,但是不是同一家店就对应代码中的虽然值相同,但值在内存中的地址不同,而变量
指向的地址也不同,这时候用==判断值是否相等的话就会出现错误。
Java 中 == 和 equals 的区别的更多相关文章
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...
- Java中==与equals的区别及理解
区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...
- Java中==与equals()的区别
声明转载来源:http://blog.csdn.net/striverli/article/details/52997927 ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系 ...
- java 中 “==” 和 equals 的区别
转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...
- java中==和equals的区别(转)
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- JAVA中==与equals的区别
equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...
- Java中==和equals()的区别
- Java中“==”与equals的区别以及equals方法的重写
一.“==”与equals的区别: (1)==代表比较双方是否相同: 基本数据类型表示值相等. 引用数据类型表示地址相等,即同一个对象. (2)Object中的equals()方法:是否为同一个对象的 ...
随机推荐
- 银行手机APP安全评估报告【转载】
猫头鹰工作室 我不相信命运,但尊敬命运 主页 大数据 Kafka Spark Hbase Redis Flume ActiveMQ 渗透测试 方法论 Kali测试 APP安全 OWASP 脑图 Too ...
- PYTHON语言书库
<SELENIUM 2 自动化测试实战 基于PYTHON语言>pdf 附下载链接 本书下载链接:https://pan.baidu.com/s/1A1s6UHecXd1Z465zbLumh ...
- ubantu 操作
应用程序启动器“monodevelop.desktop”还没有被标记为可信任的. 于是在网上查询解决方案,在ubuntu中文论坛找到一个帖子提到这个问题的解决方法,尝试之解决. 帖子地址:http:/ ...
- My sql 自增 虚拟列。
在MYSQL 是没有类似MSSQL 2008 / oracle 数据库开窗函数 over() ,rank(), DENSE_RANK() ,ROW_NUMBER() 又叫窗口函数 . 当我们需要在查询 ...
- iOS跳转洁面时隐藏tabBar的方法
//1.设置self.tabBarController.tabBar.hidden=YES; self.tabBarController.tabBar.hidden=YES; //2. ...
- python中from __future__ import division
ppython2.7版本中整数相除得出的结果不显示小数 a = 9 / 2 print(a) 输出结果: 4 此时就需要调用from __future__ import division 1 from ...
- PostMessage实现多窗口之间的数据传递
[本文参考自网络,参考地址:https://blog.csdn.net/lsyyoyo/article/details/38726419] 1.在公共的头文件中添加一个宏定义: #define WM_ ...
- 16.linux常用查看命令
cat :查看整个文件tail -200f abc.txt :查看abc.txt的最后200行
- 02.photoshop制作透明图片步骤
1.首先打开PS软件和图片如下.文件-新建. 2.如下图背景内容选择-透明.在确定. 3.出现了白底这就是透明的. 4.将图片背景都去除 5.在选择文件-存储为 6.格式选择.GIF的文件.其它不是透 ...
- URL中文乱码及特殊字符处理
一.中文乱码 IE高版本(应该是9以上,不确定),在get方式请求中中文传到后台容易出现乱码问题.解决方法如下: 1.第一种,换成post方式 如果可以得话换成post方式就可以.如果采用表单或者aj ...