equals和hashCode是我们日常开发最常使用的方法,但是因为一般都使用默认的规则,因此也很少会引起关注.不过了解他们的用途和设计的原则,还是会帮助我们更好的设计代码. equals equals是java很基础的一个问题,通常都会跟==来做比较.那么看看下面的问题: int a = 1; int b = 1; System.out.println(a==b);//true Integer a1 = new Integer(1); Integer a2 = new Integer(1);…
再次回顾这些基础内容,发现自己理解的又多了一点.对于一些之前很模糊的概念,渐渐的清晰起来. 抽象类与接口 抽象类通常是描述一些对象的通用方法和属性,并且默认实现一些功能,它不能被实例化.接口仅仅是描述一种方法的规约,即只能通过某几个方法来操作对象,它把内部的实现隐藏到实现类中,自己仅仅关注使用而已. 参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现 接口完全是抽象的.它根本不存在方法的实现 实现 子类使用extends关键字来继承抽象类.如果子类不是抽象类的话,它需要提供抽象类中所有声…
其实Java还有很多其他的基础知识,在日常工作技术撕逼中也是经常被讨论的问题. 深克隆与浅克隆 在Java中创建对象有两种方式: 一种是new操作符,它创建了一个新的对象,并把对应的各个字段初始化成默认值: 另一种是用clone方法,基于已有的对象创建一个新的对象,此时会根据原有的对象各个字段赋值给新的对象. 如果对象的字段都是基础类型,没有什么问题,但是如果字段是对象,那么其实clone的时候复制的仅仅是对象的引用而已. 上面就是深克隆与浅克隆的区别. 在我们日常的开发中,如果涉及到克隆,就需…
列表对于日常开发来说实在是太常见了,以至于很多开发者习惯性的用到数组,就来一个ArrayList,根本不做过多的思考.其实列表里面还是有很多玩法的,有时候玩不好,搞出来bug还得定位半天.所以这里就再啰嗦一下,整理下相关的内容. 基础知识 一般计算机相关的专业都应该学过数据结构,而很多的集合都是应用了经典的数据结构设计的.比如数组.栈.队列.链表.树等等,里面也会用到很多常见的查找或者排序算法,所以就先简单的回顾下. 数组 数组在c语言里面用的很广泛,刚开始学习的时候,整天的空指针和数组越界.后…
equals()是Object中的一个方法: public boolean equals(Object obj) { return (this == obj); } 在Object中equals()方法返回结果其实是跟 == 返回的结果是一致的.但是,子类中对其进行了重写,如String public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof S…
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. public class Object { public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } }         任何的类都是Object类的子类,所有它们默认都拥有这两个方法.      …
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复.这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的h…
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象的内容(内容可以有很多,比如同时比较姓名和年龄,同时相同的才是用一个对象)是否相同 如果…
java于==.equals().hashCode()和比较两个对象. 关于== ==是easy理解的.java设计java就是要比較两个对象是不是同一个对象. 对于引用变量而言.比較的时候两个引用变量引用的是不是同一个对象.即比較的是两个引用中存储的对象地址是不是一样的. 对于基本数据类型而言,比較的就是两个数据是不是相等,没什么歧义. 因为对于基本数据类型而言.没有方法,所以不存在equal()和hashCode()的问题.以下的讨论都是针对引用类型而言的. 关于equals() 为什么ja…
Java中的equals和hashCode方法详解  转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equa…
解析Java对象的equals()和hashCode()的使用 前言 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个.在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了.但是在一些情况下,这两个函数最好是自己设计,才能确保整个程序的正常运行.最常见的是当 一个对象被加入收集对象(collection object)时,这两个函数必须自己设计.更细化的定义是:如果你想将一个对象A放入另一个收集对象B里…
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相 等,equals()不相等…
摘要 Java中equals()和hashCode()有一个契约: 如果两个对象相等的话,它们的hash code必须相等: 但如果两个对象的hash code相等的话,这两个对象不一定相等; 这个约定直接导致了如下3个规则: :无论你何时实现 equals 方法,你必须同时实现 hashCode 方法: 永远不要把哈希码误用作一个key: 在分布式应用中不要使用哈希码: 需要说明的是: 关于规则2:<永远不要把哈希码误用作一个key> ==>也可以将哈希码作为key,但需要经过2步去处…
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的equals()和hashCode() - 详细篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦 简介 说到equals和hashCode,首先要说下Object 我们都知道,这个Object是Java所有类的超类,其他类都是从Object直接或间接继承而来的 而Object中自带的equals和hashCode方法就是今天我们要谈论的话题 目录 什么是equals()方法 什么是…
web开发经历了很漫长的时间,在国内也快有十几年的时间了.从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的知识. 发展历程 第一阶段 CGI进程响应 这一阶段,服务器比较弱,请求也很简单,就是用户发一个请求,服务器接收后新建进程,然后返回结果. 这种方式一看代价就很大,每次都新建进程,很麻烦. 第二阶段 Servlet线程级别响应 Servlet结构跟上面差不多,只不过每次都只是新建一个线程,这样代价就小很多了. Servlet的生命周期有四个…
背景知识 哈希冲突 哈希是指通过某种方法把数据转变成特定的数值,数值根据mod对应到不同的单元上.比如在Java中,字符串就是通过每个字符的编码来计算.数字是本身对应的值等等,不过就算是再好的哈希方法,也有可能出现两个不同的对象hash值相同的情况.如果在HashMap中,hashcode相同,它们就会被分配到对应的存储位置,此时就会出现冲突--也叫做哈希冲突. 解决哈希冲突的方法有很多种: 开放地址探测法:即如果出现哈希冲突,则按照一定的规则继续选择位置,如线性探测法再.二次探测再.伪随机探测…
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类.所有的对象,包括数组,都实现了在Object类中定义的方法. equals()方法详解 equals()方法是用来判断其他的对象是否和该对象相等. equals()方法在object类中定义如下: public boolean equals(Object obj)…
概述 在我们使用类集框架(比方使用hashMap.hashSet)的时候,常常会涉及到重写equals()和hashCode()这两个方法. 这两个方法的联系是: 1. 假设两个对象不同,那么他们的hashCode肯定不相等: 2. 假设两个对象的hashCode同样.那么他们也未必相等. 所以说.假设想在hashMap里面让两个不相等的对象相应同一个值,首先须要让他们的hashCode同样.其次还要让他们的equals()方法返回true,因此为了达到这个目的,我们就仅仅能重写hashCode…
原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象的内容(内容可以有很多,比如同时比较姓名和年龄,同时相同的才是用一个对象)是否相同 如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址…
参考:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题:     …
1.重写equals方法实例   部分代码参考http://blog.csdn.net/wangloveall/article/details/7899948 重写equals方法的目的是判断两个对象的内容(内容可以有很多,比如同时比较姓名和年龄,同时相同的才是用一个对象)是否相同 如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等.特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该…
equals() 和 hashCode() 在 Object 类中以本地方法的形式存在,Java 中所有的类都继承了 Object 类,因此所有的类中都包含了这两个方法.这两个方法在 Java 开发中使用及其频繁,熟系这两个方法的使用是掌握 Java 语言的必要条件.这里总结了重写这两个方法的两点原则,并提供了一套代码模板. equals() 从 JDK 源码注释中可以看到:Java 中使用 equals() 来表示两个对象是否相等.a.equals(b) 返回 true 表示 a 和 b 两个…
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同.Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同:(2)如果两个对象的hashCode相同,它们并不一定相同.当然,你未必要按照要求去做,但是如果你违背了上述原则就会…
一.相同点 都是用来进行值或对象的比较. 二.不同点 对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相等的,对于引用对象,对比的是引用的对象的堆地址,例如: public class Main { public static void main(String[] args) throws InterruptedException { Object obj1 = new Object(); Objec…
equals 和 hashCode含义 equal:判断两个对象是否相等,如果相同,返回true 否则返回false hashcode: 返回一个int数 Object 默认(内部地址转化为一个数字) 两者关系 如果equals(obj)返回true, 那么 hashCode一定返回一样的值 如果equals(obj)返回false, 那么 hashCode 不一定返回一样的值 如果hashCode 返回相同的数,那么 equals 不一定返回true 如果hashCode返回不一样的数,那么e…
Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础--这就是JVM.在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情况.在Java中JVM内置了垃圾回收的机制,帮助开发者承担对象的创建和释放的工作,极大的减轻了开发的负担.那是不是我们就不需要了解JVM了,显然在做一些优化或者深入研究应用性能的时候,JVM还是起了很关键的作用的.因此本篇就总结性的描述下JVM的内存模型与垃圾回收相关的知识. 本文的主要内容如下:…
equals 与 == 先上一段经典代码 public static void main(String[] args) { // TODO Auto-generated method stub int n=3; int m=3; System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String(…
故事背景 电视剧<天龙八部>中,阿朱易容后进入少林寺偷走了<易筋经>,她一直想把这本书送给乔峰.耿直的乔峰觉得此书来历不正,不肯接受.几番波折,这本书最后落到聚贤庄庄主游坦之手里.怪人游坦之靠着<易筋经>练就神功,后来甚至能和乔峰抗衡. <易筋经>的功夫圜一身之脉络,系五脏之精神,周而不散,行而不断,气自内生,血从外润.练成此经后,心动而力发,一攒一放,自然而施,不觉其出而自出,如潮之涨,似雷之发.练那<易筋经>,便如一叶小舟于大海巨涛之中,怒浪…
之前说过Java中类的加载顺序,这次看完继承部分,就结合继承再来说说类的加载顺序. 继承的加载顺序 由于static块会在首次加载类的时候执行,因此下面的例子就是用static块来测试类的加载顺序. package xing.test.thinking.chap7; class A{ static{ System.out.println("A static"); } } class B extends A{ static{ System.out.println("B stat…
==比较的是地址 equals比较的是内容. 所以要重写object的equals方法. public class TestEquals { public static void main(String[] args) { Cat c1 = new Cat(1, 2, 3); Cat c2 = new Cat(1, 2, 3); System.out.println(c1 == c2); System.out.println(c1.equals(c2)); String s1 = new Str…