zoukankan      html  css  js  c++  java
  • equals(),hashcode(),克隆学习心得

        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());
    }

          

  • 相关阅读:
    String painter HDU
    GCD Counting-树形DP
    XOR UVALive
    BZOJ-9-3295: [Cqoi2011]动态逆序对
    E
    Stars HDU
    二维单调队列(理想的正方形+修筑绿化带)
    P3622 [APIO2007]动物园
    COJ1160[一本通 5.3 例 1」Amount of Degrees
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/tom-plus/p/5857037.html
Copyright © 2011-2022 走看看