为了账号安全,请及时绑定邮箱和手机立即绑定

equals()方法和contians()方法实现讲解

标签:
Java
    首先说明在java语言中“==”的用法。
  1. “==”的用法

     “==”用于判断两个元素是否相等,用于基本数据类型比较和引用比较会产生不同的效果。

    (1)基本数据类型比较:只要两个数据的值相等,就返回true,否则返回false。在这里是比较的是数值。
    (2)引用比较:如果引用指向同一块内存区域,则返回true,否则为flase。

  2. equals()方法
    equals()方法是确定两个对象的引用是否相等。
    首先在这里讲一下String类的equals()方法。字符串常量存储在字符串池中,存储机制为首先会在池中查找有没有相同的字符串,如果没有则存入,如果有则将已有的字符串的引用赋给常量,即字符串池中的字符都是不同的。如下
String  w = "name";
String  l = "name";
System.out.println(w==l);执行结果是true。因为w和l指向内存的同一块地址。
System.out.println(w.equals(l));//因此这个地方也返回true。
        String h = new String("KKK");
        String x = new String("KKK");
        System.out.println(h==x);//返回值为false。

因为new一个变量,是在堆中分配内存,因此h和x指向的是不同的内存区域,所有返回值为false。然而System.out.println(h.equals(x));//返回true,为什么呢?那是因为String类覆盖了equals()方法,使equals()方法是比较的是值相等。

  • 一般类的equals()方法
public List courseToSelect=new ArrayList();;
Course c = (Course) it.courseToSelect.get(0);
System.out.println(c);
System.out.println(it.courseToSelect.get(0).equals(new Course("1","数据结构")));
System.out.println(it.courseToSelect.get(0).equals(c));

执行结果如下:图片描述

第一行为打印的是c对象的引用,第二行返回值为false,那是因为引用那个不同,第三行为true是因为c指向序列的第0元素。
3. contains()方法
JAVA API中对List的contains()方法的解释如下:可以看出在contains()内部也是调用的equals()方法进行判断的,因此它也是判断的对象的引用是否相同。

如果此列表中包含指定的元素,则返回 true。更确切地讲,当且仅当此列表包含至少一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,则返回 true。

看一下的代码:

Course c = (Course) it.courseToSelect.get(0);
System.out.println(c.id + c.name);
System.out.println(it.courseToSelect.contains(new Course("1","数据结构")));
System.out.println(it.courseToSelect.contains(c));

运行结果是图片描述

4.因此当我们需要判断序列中是否包含具有某个属性的对象时需要自己重写equals()方法。

点击查看更多内容
7人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消