zoukankan      html  css  js  c++  java
  • 关于ArrayList 中子方法 contains 疑惑解决

    写之前先看下 ArrayList 子函数 contains 的Api 怎么介绍:

    boolean contains(Object o)
              如果此列表中包含指定的元素,则返回 true

    先看个字面意思过过眼就好了 哈哈哈

    然之后 我们上实例见 问题:(详看注释)

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            List list = new ArrayList();
            Person person_sl = new Person("张三",10);    //Person类无重新写equals
            list.add(person_sl);
            System.out.println(list.contains(person_sl));   //true
            System.out.println(list.contains( new Person("张三",10))); //false
    
    
            list.add("a");
            String str_a = new String("a");
    
            System.out.println(list.contains("a")); //true
            System.out.println(list.contains(str_a));   //true ??? 不是说好比的是地址嘛?
        }
    }

    哎 前头比的是地址 怎么后头两个地址不一样的字符串都为true了????

    别急:我们跟踪进去看看:

    跟进去发现他是ArrayList 重写父接口的 那么 看下他怎么重写的:

    public boolean contains(Object o) {
    return indexOf(o) >= 0;
    }

    一看! 哎! 好家伙! 原来是用 indexof 来找的,那么我们在跟踪进去看看 他 indexof 是怎么实现是:

    public int indexOf(Object o) {
    if (o == null) {
    for (int i = 0; i < size; i++)
    if (elementData[i]==null)
    return i;
    } else {
    for (int i = 0; i < size; i++)
    if (o.equals(elementData[i]))
    return i;
    }
    return -1;
    }

      好家伙 这下明白了吧 :除了null之外  他都是用 equals 来判断的:

      那么就懂了:

      我前面已满侠伏笔 说: 无重写 equals ,所以啊 他默认比的是地址

      因为String类 它重写了equals  无论如何 它比的都是 内容 ,这下真相大白了!

      所 你完全可以在自己类重写任何object 的方法,这个设计到面向对象了!

      谢谢大家看到这里 希望能帮到小白和疑惑人群,谢谢!

     

      -----年年花相似  岁岁人不同-----

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14672128.html

  • 相关阅读:
    当Django模型迁移时,报No migrations to apply 问题时
    django--各个文件的含义
    django--创建项目
    1013. Battle Over Cities (25)
    1011. World Cup Betting (20)
    1009. Product of Polynomials (25)
    1007. Maximum Subsequence Sum (25)
    1006. Sign In and Sign Out (25)
    1008. Elevator (20)
    1004. Counting Leaves (30)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14672128.html
Copyright © 2011-2022 走看看