温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行equals()方法和==异同的比较

发布时间:2021-11-26 10:03:50 来源:亿速云 阅读:122 作者:柒染 栏目:编程语言

如何进行equals()方法和==异同的比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

equals()方法是Object类的方法,所有的类都集成了此方法,还有部分类重写了这个方法,我们看一下Object类中关于该方法的的源码:

  1.     public boolean equals(Object obj) {

  2.         return (this == obj);

  3.     }

可以知道,凡事从Object中继承的equals()方法底层使用的都是==,也就是两者比较的都是地址值。
我们再来说一下String,这个类复写了equals()方法,源码如下:

  1.     public boolean equals(Object anObject) {

  2.         if (this == anObject) {

  3.             return true;

  4.         }

  5.         if (anObject instanceof String) {

  6.             String anotherString = (String)anObject;

  7.             int n = value.length;

  8.             if (n == anotherString.value.length) {

  9.                 char v1[] = value;

  10.                 char v2[] = anotherString.value;

  11.                 int i = 0;

  12.                 while (n-- != 0) {

  13.                     if (v1[i] != v2[i])

  14.                         return false;

  15.                     i++;

  16.                 }

  17.                 return true;

  18.             }

  19.         }

  20.         return false;

  21.     }

该方法中,首先用==比较,如果两者地址值相同,就返回true,如果地址值不相同,再判断字符串内容是否相同,如果相同,返回值也是true,我们可以做一个实验:

  1. class equalsTest{

  2.         public static void main(String[] args){

  3.                 String a = "abc";

  4.                 String b = "abc";

  5.                 String c = new String("abc");

  6.                 sop(a==b);         //true

  7.                 sop(a.equals(b));  //true

  8.                 sop(a==c);         //false

  9.                 sop(a.equals(c));  //true

  10.         }

  11.         

  12.         public static void sop(Object o){

  13.                 System.out.println(o);

  14.         }

  15. }

这个实验中,变量a和b底层默认启动的享元设计模式,指向的都是“abc”这个字符串对象,所以地址值相同,而语句new String("abc")底层创建的是两个对象,所以c的地址值和a,b不同,用==判断的结果为false,但是c指向的字符串内容与a是相同的,所以用equals()判断的结果为ture。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI