ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

equals 与 ==

2020-08-05 05:31:16  阅读:232  来源: 互联网

标签:code return String object equals anObject


写代码时,equals== 都是常用的手段检测两者是否相等,那么具体有什么异同呢?我们来结合源码分析一下。

 

==

 ==  是操作符,对于基本类型变量(如 int 、 short 、 long 等),它们没有 equals 方法,因此一般都是用  == 进行比较。

比较的是它们的值。

 

equals

对于引用型变量,它们都是继承自 Object 类,对于同类型的比较,如果没有复写 equals 方法的话,默认是比较它们在内存中的值。

源代码如下:

 

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

 

对于复写过 equals 方法的类,它们的对象调用该方法,呈现的效果就不太一样了。

例如String,该类的实现代码如下:

 

    
/**
* Compares this string to the specified object. The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* <p>For finer-grained String comparison, refer to
* {@link java.text.Collator}.
*
* @param anObject
* The object to compare this {@code String} against
*
* @return {@code true} if the given object represents a {@code String}
* equivalent to this string, {@code false} otherwise
*
* @see #compareTo(String)
* @see #equalsIgnoreCase(String)
*/

public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false;
}

 

从代码中可以看出,针对两个字符串对象,如果内存地址相同,直接返回 true ,否则比对值的情况。

 

有兴趣的朋友请查阅下Java源码,从更深的角度理解这个问题。

源码赛高~

 

标签:code,return,String,object,equals,anObject
来源: https://www.cnblogs.com/mengtaozhang/p/13437470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有