浅析java中 == 和equals的区别

来源:互联网 发布:vb.net winhttp 编辑:程序博客网 时间:2024/06/05 20:43

"=="操作符的作用

1.对比基本数据类型的值是否相等

2.对比引用在对内存中的引用内存是否相同


equals的作用

对比两个不同对象的内容是否相同

equals所在位置:

在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写

public boolean equals(Object obj) {        return (this == obj);    }

  用几个简单例子轻松了解区别

例子1.两个变量名不同 赋值相同

结论:如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

所以此时两个变量引用地址相同 用== 跟equals结果相同

例子2.两个String对象引用不同,内容相同

结论:两条new语句创建了两个对象,然后这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即两个引用中存储的数值(引用地址值)是不相同的,所以用==会返回flase 而用equals 会返回true

例子3.两个Object对象引用不同 内容相同

结论:如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。



1 0
原创粉丝点击