==和equals的区别

在JVM(java虚拟机)中 内存分为栈内存和堆内存:

当我们创建一个对象(new Object)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,基本数据类型是存储在栈内存中。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是2个对象的地址,而equals比较的是2个对象的内容。

显然,当equals为true时,==不一定为true;

(1)“==”

A.用于基本数据类型的比较

B.判断引用是否指向堆内存的同一块地址。

(2)“equals”

用于判断两个变量是否对同一个对象的引用。简单说就是,堆中的内容是否相同

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在阅读此章之前,请首先跳转阅读java面试 内存中堆和栈的区别首先从一段代码开始 执行结果 一、 关系操作符 ==...
    步积阅读 6,680评论 1 4
  • 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中...
    shu2man阅读 1,508评论 1 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,426评论 11 349
  • 人生总是需要力量,但是力量却总是不够用,但是,当你有一天突然发现自己的力量源源不断,你会怎么做呢?
    吴下阿蒙_2006阅读 2,571评论 0 0
  • 【鸽子】 没有谁能抗拒的了,一把破木吉他低沉的和旋,还有轻吟浅唱就能弄哭的嗓子。 就像,谁也不能拒绝一片星光呢喃的...
    无魔大仙阅读 4,168评论 0 3