equals(),hashcode(),克隆学习心得

其实在开发时候,很少去重写equals(),hashCode()方法,但是有些时候业务需要还是要重写。

注意:

重写equals()方法一定要重写hashCode()方法。

notes:

java中两个对象的比较,首先查看的就是一个对象的hashCode,可以把hashCode理解为索引,通过索引可以找到其对应下的内容,可能会有多个。

如果说两个对象的hashCode都不相等,那可以肯定这个对象不同。

equals() 相等的两个对象,其hashcode一定相等,hashcode相等的,equals不一定相等。

     why?   

      equals相等的两个对象,两者肯定来自同一个索引,所以说两者hashcode一定相等,但是hashcode相等,只能代表他们来自同一个索引,索引下的内容可以有很多,不一定多相同。例如:方向,方法两个词语,按照'方'字索引的话,两者索引是相同的,但是两者的具体内容确实不同的。

    克隆:

       java的8钟基本类型的克隆都是深度克隆,除此之外,如果一个对象中有引用其他对象,那就需要进行深度克隆。

      方法有两种:

      1:类实现 Serializable and Cloneable接口

在引用的对象中,调被引用对象的克隆方法,等到克隆的被引用对象,然后set it.

2: 通过序列化和反序列化

demo如下:前提类要实现Serializable接口

@Test
public void testClone() throws Exception {
Student student = new Student();
student.setSName("樱木小哥");
student.setAmount(new BigDecimal(10));
student.setAddress("嘻嘻背影");
Teacher teacher = new Teacher();
teacher.settName("灌篮高手");
teacher.setAddress("余杭区");
student.setTeacher(teacher);
System.out.println(student.toString());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(student);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
System.out.println(byteArrayInputStream.available());
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Student newStudent = (Student) objectInputStream.readObject();
objectInputStream.close();
objectOutputStream.close();
//byteArrayInputStream.close();
//objectOutputStream.close();
System.out.println(newStudent.toString());
student.setSName("樱木小哥1");
student.setAddress("西湖区");
teacher.settName("灌篮高手2");
System.out.println(newStudent.toString());
System.out.println(byteArrayInputStream.available());
}

      

equals(),hashcode(),克隆学习心得的更多相关文章

  1. effective java 学习心得

    目的 记录一下最主要学习心得,不然凭我这种辣鸡记忆力分分钟就忘记白看了... 用静态工厂方法代替构造器的最主要好处 1.不必每次都创建新的对象 Boolean.valueOf Long.valueOf ...

  2. SpringMvc学习心得(五)控制器产生与构建

    SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报  分类: Spring(4)  ...

  3. JAVA第二次作业展示与学习心得

    JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...

  4. java集合类学习心得

    java集合类学习心得 看了java从入门到精通的第十章,做个总结,图片均取自网络. 常用集合的继承关系 Linked 改快读慢 Array 读快改慢 Hash 两都之间 Collection是集合接 ...

  5. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  9. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

随机推荐

  1. FBI阅人术——用最短的时间了解一个人

    FBI阅人术--用最短的时间了解一个人 和陌生人第一次见面时,要如何在一开始谈话的几分钟内,了解这个人?如何和对方拉近距离?如何找到对方喜爱的话题?如何让对方愿意开口? 这都得依靠细心而入微的观察力, ...

  2. 教你摸清 Linux PC 的性能底细?

    导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好.在许多情况下,“基准测试”实际上等同于“压力测试”.通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...

  3. ServletConfig 可以做啥

    1.获得 servlet配置的servletname 2.获得servlet 配置的  getInitParameter("keyname") 3.获得servlet配置的 所有的 ...

  4. java2

    1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字 ...

  5. 【转】sed 简明教程

    本文转自:http://coolshell.cn/articles/9104.html awk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以 ...

  6. PHP-----练习-------租房子-----增删改查,多条件查询

    练习-------租房子-----增删改查,多条件 一 .题目要求: 二 .做法: [1]建立数据库 [2]封装类文件------DBDA.class.php <?php class DBDA ...

  7. 通过ios实现RSA加密和解密

    在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...

  8. 仿Redis用来作前端浏览器的数据存储结构

    用js写了一个类似redis存储结构的类库,目前只有的存储类型只有hash.set两个, 还没测试过性能,欢迎各位猿友能够帮我指出程序代码的缺陷, 后期有时间会完善其他几个类型的存储结构. /**** ...

  9. hive创建索引

    索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 hive> create index [index_studentid ...

  10. php接口

    如果要继承多个类的方法规范,用接口,因为抽象类只能继承一个: 如果要共享一个方法体内容,用抽象类: <?php //接口是为了规范实现它的子类,以达到统一的目的 //接口不能被实例化 inter ...