码迷,mamicode.com
首页 > 其他好文 > 详细

==和equals

时间:2015-01-02 17:30:15      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

基本数据类型都放在栈里面,所以基本数据类型可以用==比较

当equals为true时,==不一定为true

==为true表示a,b 是同一个类的某一实例的不用引用

equals为true还可以表示a,b 是同一个类的不同实例的各自的引用,即堆中不同地址存放的内容是相同的

附:
当new一个对像类时,就会在堆中开辟一块空间,然后,会把这个空间的地指向你new 的这个句柄,这个句柄就会放在栈中,(栈)就像个列表,
CPU会向栈发送指令进行操作。(栈像一本书的目录,堆像书中的详细章节)栈中存放的是对象的具体物理地址。

Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。

==和equals

标签:

原文地址:http://www.cnblogs.com/gaoxiangde/p/4198576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!