java中==与equal的区别
来源:互联网 发布:手机淘宝如何发布二手 编辑:程序博客网 时间:2024/05/22 13:25
因为最近刚开始写java,前几天我用==判断String是否相等,结果悲剧了,怎么都不想等。就看了下原因。总结了下,区别大致就是下面的这几点了。
==与equal的本质区别
1. == 是一个运算符
2. Equals则是一个方法
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
equal用于比较两个对象的值是否相同【不是比地址】
【特别注意】Object类中的equals方法和“==”是一样的,没有区别,都是比较的内存地址是否相同。而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
“==”比”equal”运行速度快,因为”==”只是比较引用.
//这是一个测试String data = new String("yu");String data1 = "yu"; //这两种创建String对象的不同,见下面//结果==的情况下,data != data1。equal的情况下,data == data1。 String data = "yu"; String data1 = "yu";//结果==和equal都是相等
在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
我们再回头看看String a=”abc”;,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为”abc”的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。因此,我们不难理解前面三个例子中头两个例子为什么是这个答案了。
只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中,对此我们不再赘述。因此我们提倡大家用引号包含文本的方式来创建String对象以提高效率,实际上这也是我们在编程中常采用的。
栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象
参考文章1
参考文章2
- java中equal与“==”区别
- java中 == 与 equal 的区别
- java中 == 与 equal 的区别
- Java中==与equal的区别
- java中 == 与 equal 的区别
- java中 == 与 equal 的区别
- java 中“==”与“equal” 的区别
- Java中“==” 与 “equal”的区别
- java中equal与==的区别
- java中==与equal()方法的区别
- java 中“==”与“equal” 的区别
- java中 == 与 equal 的区别
- java中equal()与==的区别简记
- java中==与equal的区别
- java中==与equal()方法的区别
- java中 == 与 equal 的区别
- java中 == 与 equal 的区别
- java 中“==”与“equal” 的区别
- gcc跨平台编译
- java编译与运行
- 单链表
- Linux开发十八_网卡驱动
- 文章标题
- java中==与equal的区别
- mybatis-spring整合异常SpringManagedTransaction.getTimeout()Ljava/lang/Integer
- Linux开发十九_nfs文件系统
- java编程中常见内容+++++++++++++++++++++++++++++++++++++++++++++++++++==
- STM32 最小系统 焊完之后的测试
- 循环赛日程表
- Linux开发二十_触摸屏驱动
- 世有不公之法,我们是安于循守,还是且改且守,待其功成。或是即刻起而破之。
- 带您了解mysql CONCAT()函数