问题引子:

ist students=newArrayList();

students.add(newStudent("20160800612"));

System.out.println(students.contains(newStudent("20160800612")))

返回FALSE

Student stu=newStudent("123");students.add(stu);System.out.println(students.contains(stu));

返回TRUE

对于以上代码,相信很多人有问题,这种不能靠主管想象力的,,,,我们还是来看后台代码靠谱

按住ctrl键点击contains进入List.class是一个接口,其中有的一个抽象方法 boolean contains(Object o);

他实际上调用的contains方法是ArrayList类中重新的contains方法

publicboolean contains(Object o) {returnindexOf(o) >= 0;

}

按住ctrl键点击indexOf进入ArrayList类中indexOf方法

publicint indexOf(Object o) {if(o ==null) {for(inti = 0; i < size; i++)if(elementData[i]==null)return i;

} else {for(inti = 0; i < size; i++)if (o.equals(elementData[i]))return i;

}return-1;

}

我们看到Object o会调用equals方法,但是Student中并没有重新equals方法,所以最后调用的事Object 中的equals方法

publicboolean equals(Object obj) {return(this== obj);

}

很明显,this==obj比较的事地址,所以两个new的对象地址肯定不是一样的,所以返回false

懂了吧~~~~~~~~~~~~~

所以还是多分析分析后台代码,更加清楚明白啦

怎么解决这个问题呢,就是在Student类中重写这个 equals方法,比较的时候去比较id 但是注意重写时参数是Object 我们需要下转型,这个时候要判断Object是否为Student

@Overridepublicboolean equals(Object obj) {if(objinstanceof Student) return((Student)obj).id.equals(this.id);returnfalse;

}

比较两个List里内容相同的元素内存地址的方法

java——ArrayList中contains()方法中的疑问相关推荐

  1. java分布式对象——远程方法中的参数和返回值+远程对象激活

    [0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...

  2. java 方法重载 应用举例,Java 实例 - 重载(overloading)方法中使用 Varargs

    以下实例演示了如何在重载方法中使用可变参数:/* author by w3cschool.cc Main.java */public class Main { static void vaTest(i ...

  3. Jvm处理Java Thread 的run方法中抛出异常的流程

    Jvm处理Java Thread 的run方法中抛出异常的流程 参考文章: (1)Jvm处理Java Thread 的run方法中抛出异常的流程 (2)https://www.cnblogs.com/ ...

  4. java arraylist 方法返回值,Java ArrayList get() 使用方法及示例

    Java ArrayList get() 使用方法及示例 Java ArrayList get()方法返回指定位置存在的元素. get()方法的语法为: arraylist.get(int index ...

  5. numpy中amin()方法中维度axis=0 1 2 的理解

    https://www.jianshu.com/p/6f58d7f39147 numpy中amin()方法中维度axis=0 1 2 的理解 axis=0  从最外一层的维度来比较 (对半比较  虽然 ...

  6. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  7. java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收

    今天逛脉脉,看见匿名区有人说java中把对做置null,这种做法很菜,不能加速垃圾回收,但是我看到就觉得呵呵了,我是觉得可以加速置null对象回收的. 测试的过程中,费劲的是要指定一个合理的测试堆大小 ...

  8. java 父类this_java父类方法中使用this,可以把this强转为子类对象,然后调用子类的实例方法,怎么解释?...

    1.代码如下 父类代码: public class A { public void a(){ B b=(B)this; System.out.println(b.getNum()); System.o ...

  9. Java如何在main方法中实例化内部类对象

    今天我在实例化一个类是编译器报以下错误: No enclosing instance of type Person is accessible. Must qualify the allocation ...

  10. java arraylist指定容量_Java中的ArrayList的容量

    List接口的大小可变数组的实现.实现了全部可选列表操做,并容许包括 null 在内的全部元素. ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操做内部用来存储列表的数组的 ...

最新文章

  1. 谷歌又有手机黑科技:进入办公室就变静音,遇车祸自动报警
  2. LeetCode 第 36 场双周赛(304/2204,前13.8%)
  3. 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
  4. 一道信号量的问题---卖火车票
  5. OAuth2.0 授权码认证方式使用流程
  6. Django中urls参数传递
  7. servlet的url-pattern匹配规则详细描述
  8. linux编译 mb_string,linux mb()/rmb()/wmb()
  9. linux命令整理(三)
  10. 计算机网络路由器作用是什么,路由器的作用是什么? 猫和路由器的区别分析【图文】...
  11. 计算机组成原理例题4.2,4.2.2 例题解析(1)
  12. linkedin数据获取策略
  13. 去掉word 2007中可恶的信息检索
  14. CSDN博客论坛——读好书,畅想“我的IT成长路”活动【已完成】
  15. 数据分析中常见的存储方式
  16. 【JavaScript】阶段性复习
  17. 智慧工地系统包括哪些部分
  18. C# 完成WebSocket demo 用GoEasy实现Hello world
  19. UTL_HTTP read_text和read_raw应用
  20. 关于使用讯搜(xunsearch)过程中遇到的坑

热门文章

  1. javascript 高级编程系列 - 创建对象
  2. 查看文章strncpy()功能更好的文章
  3. 特殊字符搜索网站 http://symbolhound.com/
  4. 创建Android Virtual Device
  5. iOS版本更新的方法
  6. 请教各位前辈一个问题。
  7. iOS底层探索之Block(二)——如何解决Block循环引用问题?
  8. PHP之Smarty模板学习
  9. ASP.NET MVC 解析模板生成静态页一(RazorEngine)
  10. mysql命令常用参数实例讲解