关于==与equals()区别
2014-02-24 00:23
148 查看
想相信很多人学习Java的时候都会被这两个的区别弄的晕头转向,我一开始也是这样的,今晚看thinking in Java的时候突然对这个问题有了比较清晰地认识,特此跟大家分享一下:
首先要明确一个预备知识,也就是Java类的存储位置问题,当我们构建一个类的两个对象的时候,Java会在内存中开辟两个对象的空间,并且让两个对象名分别指向这两个类,而每个类的对象空间中都存着各自的变量值。
下面就是正题啦:
当我们创建两个Interger()【注意,Interger类是java类库的类,这个提示后面会提到作用】
Interger n1 = new Interger(47);
Interger n2= new Interger(47);
若用==比较n1 与 n2 这两个类 返回的是false,而用equals比较两个对象则返回true。为什么呢,因为==比较是引用,也就是所,比较n1,n2两个对象名指向的空间,当然是不一样的。而equals比较是是n1,n2的内容,当然是一样的。
可能有人看到这会说,很简单啊,==比较的是对象的引用,equals比较的时对象的具体内容。
但事情并不是这么简单地,其实equals方法比较的也是对象的引用,那为什么前面的Interger 两个对象可以比较出来呢。这个是因为,Interger类是Java类库的类,Java类库已经对大部分的类中得equals方法进行了重写,使其变成比较对象中得内容。
也就是说,如果你想比较自己写的类的内容是否一样,依然不能用equals。但是你可以在自己的类中重写equals方法,使其具备比较内容的作用!
首先要明确一个预备知识,也就是Java类的存储位置问题,当我们构建一个类的两个对象的时候,Java会在内存中开辟两个对象的空间,并且让两个对象名分别指向这两个类,而每个类的对象空间中都存着各自的变量值。
下面就是正题啦:
当我们创建两个Interger()【注意,Interger类是java类库的类,这个提示后面会提到作用】
Interger n1 = new Interger(47);
Interger n2= new Interger(47);
若用==比较n1 与 n2 这两个类 返回的是false,而用equals比较两个对象则返回true。为什么呢,因为==比较是引用,也就是所,比较n1,n2两个对象名指向的空间,当然是不一样的。而equals比较是是n1,n2的内容,当然是一样的。
可能有人看到这会说,很简单啊,==比较的是对象的引用,equals比较的时对象的具体内容。
但事情并不是这么简单地,其实equals方法比较的也是对象的引用,那为什么前面的Interger 两个对象可以比较出来呢。这个是因为,Interger类是Java类库的类,Java类库已经对大部分的类中得equals方法进行了重写,使其变成比较对象中得内容。
也就是说,如果你想比较自己写的类的内容是否一样,依然不能用equals。但是你可以在自己的类中重写equals方法,使其具备比较内容的作用!
相关文章推荐
- java中关于“==”和“equals()”方法的区别
- 关于equals()方法和==的区别
- Java中关于==和equal的区别 以及equals()方法重写
- 关于Set的非重复判断以及“==”和“equals”的区别
- 关于“==”和“equals”的区别
- 关于C#中==与Equals方法的区别总结
- 关于Integer类中equals和"=="的区别
- 关于Equals 和== 的区别
- Java 关于 equals与操作符==的区别
- 关于equals和==之间的区别(举例说明)
- 关于hashcode(),equals()和==的区别
- 关于数据类、字符类的(==)、equals()方法和valueOf()方法的区别比较
- 关于equals与"=="的区别
- 关于Equals 和== 的区别
- 关于==和equals的区别
- 关于字符串==和equals的区别 ==对象相同 equals对象内容相同
- Java中关于==和equal的区别以及equals()方法重写
- 2014/03/13 关于“= =”;“compareTo”;“equals”的区别
- 关于 equals 和 == 的具体区别 从源码角度分析
- 关于Java中的==和.equals()区别