java中==和equals问题
来源:互联网 发布:windows 蓝框 编辑:程序博客网 时间:2024/05/19 14:53
本文是在浏览论坛时发现很多这样的问题,因此在收集相关的基础上写成的。内容涉及内存存放问题、自动装箱和自动拆箱问题、==和equals问题。
(1)首先看下java中对象的内存存放问题。
代码如下:
=左面的对象都是存放在堆栈里作为对象引用,而后面的对象信息存放在哪里呢?
先看简单的:
String sa=”a string“;
这是一个比较经典的对象声明方法,其中,sa是指向"a string"对象的一个引用,"a string"是其引用对象的内容,其实,"a string"对象和sa对象均存放在堆栈里了。
这里需要强调一点,在JAVA的内存分配机制中,共有两中存储区域:堆栈和堆。其中堆栈存放程序过程,以及对象引用以及基本类型,以及这个古怪的对象String。
在堆栈中,JAVA为了能够让程序员轻松的操作字符串,设立了一个字符串容器--缓冲池。如上例中,当我们声明sa变量的时候,共分为以下几步:首先是由JVM到缓冲池中查找"a string",缓冲池是在每个线程初始化的时候初始的。如果找到了,那么将已存在的"a string"交给sa,如果没有找到,那么将"a string"存放入缓冲池中,并将它的地址付给sa,这样就完成了整个付值操作。
(2)自动装箱和自动拆箱问题
自java1.5以后有了这两个概念。
(3)==和equals问题
==比较的是引用对象的内存地址是否一致,而equals比较的仅仅是属于同一类的对象的属性值是否相等。
对于equals的理解还可以参考Java中Integer的equals()方法的源代码:
代码1:
另一代码:
在(1)(2)问题阐述后,相信问题(3)中的结果就不难理解了。如果还有什么不明白的可以留言讨论。
- java中==和equals问题
- (转)JAVA中==和equals问题
- 在java中“==”和equals的问题
- Java中 hashcode 和 equals、equals和==
- java中Object.equals()和==以及字符串.equals()
- Java的equals和==问题
- java中 ==和 equals区别
- java中==和equals()
- java中"==" 和 equals区别
- Java中equals和==区别
- Java 中equals和==区别
- java中==和equals区别
- Java中equals和== 区别
- Java中"=="和"equals"区别
- Java中 equals 和 == 区别
- java中==和equals
- java中 == 和 equals
- java 中==和.equals 区别
- SQLServer字符串批量拆分得方法
- 打造Swing绚丽按钮
- jquery中文乱码二
- 自学java一年半来遇到的乱码问题及解决方法(一)
- RTTI、虚函数和虚基类的开销分析及使用指导
- java中==和equals问题
- 睡眠与养生[转载]
- ubuntu9.04设置3d桌面后单击工作区切换器来切换桌面后上下面板丢失图标消失的解决办法
- Eclipse的resource视图去除CVS目录显示的方法[转]
- 三层构架组成
- 打造绚丽的Swing slider
- Sax character method cutting elements
- ASP.NET里的Session详细解释
- CDC(设备环境)与CGdiObject(图形对象)