"=="和equals方法究竟有什么区别
来源:互联网 发布:java反序列化是什么 编辑:程序博客网 时间:2024/05/17 01:00
今天看到一篇不错的文章,就转过来了
== 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals()方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码: String a=new String("foo"); String b=new String("foo"); 两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals()方法。如果一个类没有自己定义equals()方法,那么它将继承Object类的equals()方法,Object类的equals()方法的实现代码如下: boolean equals(Object o){ return this==o; } 这说明,如果一个类没有自己定义equals()方法,它默认的equals()方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals()和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals()方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
0 0
- "=="和 和 equals 方法究竟有什么区别
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别
- “==”和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别
- "=="和equals方法究竟有什么区别
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别
- "=="和equals 方法究竟有什么区别?
- “==”和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- "=="和equals方法究竟有什么区别?
- 支持向量机通俗导论(理解SVM的三层境界)
- 软件卸载不彻底 注册表清理 修改权限
- 学习总结: Algorithms: Design and Analysis, Part2
- 蛇形填数
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- "=="和equals方法究竟有什么区别
- 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
- ACM二进制运算技巧
- 大端和小端存储区别
- firefox报错 关于 JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
- ubuntu 10.04下的配置tftp服务器
- HDU4355--Party All the Time,HDU3714--Error Curvese三分法
- 黑客碰见小白。。真无赖啊@!
- 构造函数详解_const的部分分析,部分转载于http://ticktick.blog.51cto.com/823160/194307