zoukankan      html  css  js  c++  java
  • JavaSE的包装类,自动装箱和自动拆箱 ,字符窜转换,toString(),equals(), hashCode()的区别

    一。基本数据类型和包装类

    包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示:

      Primitive-Type     Wrapper-Class
            byte                  Byte
            short                 Short
            int                     Integer
            long                  Long
            float                  Float
            double                   Double
            boolean                 Boolean
            char                                Character

    1)作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

    2)包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

    二。自动装箱和自动拆箱

       //自动装箱(就是把基本数据类型转换成包装类型)
       Integer cc=111;
       //自动拆箱(就是把包装数据类型转换成基本数据类型)
       int ccparm=cc;

    三.基本数据类型和字符窜之间的转化

     //基本数据类型转换成字符窜

      int aa=1;

     System.out.println(Integer.toString(aa));
     System.out.println(String.valueOf(aa));
     System.out.println(aa+"");
     //字符窜转换成基本数据类型
     String bb ="1234";
    System.out.println(Integer.parseInt(bb));
    System.out.println(Integer.valueOf(bb));

    四。向上转型和向下转型

        //转型:父类引用指向子类对象
       //向上转型
      Animal animal=new Bird();
      animal.eat();
      //向下转型
      Bird bird=(Bird)animal;
      bird.fly();

    五。==和equals方法的区别 

     1)基本类型变量的比较
              基本类型变量指向的不是对象,不能调用方法,所以只能使用==进行比较,并且比较的是基本类型变量的简单数值是否相等。
        
      2)引用类型变量的比较
              引用类型变量指向的是对象,所以既可以使用==进行比较,也可以使用equals进行比较

             区别在于:
                  equals是Object中的方法,每个对象都可以调用和其他对象比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。

                 ==是java中的基本的操作符,是不能重写的,俩个引用使用==进行比较,那么比较的是引用所指向的内存地址值是否相同。

     六。Object 类中的toString(),equals(),hashCode()方法之间的关系。

       Object 类

    public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    public boolean equals(Object obj) {
            return (this == obj);
        }
    public native int hashCode();

    StudentBean类

    public class StudentBean {
        private String username;
        private int age;
    
        @Override
        public String toString() {
            return "StudentBean [username=" + username + ", age=" + age + "]";
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((username == null) ? 0 : username.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            StudentBean other = (StudentBean) obj;
            if (age != other.age)
                return false;
            if (username == null) {
                if (other.username != null)
                    return false;
            } else if (!username.equals(other.username))
                return false;
            return true;
        }
       
      
    }

     测试

    public class TestStudentBean {
      public static void main(String[] args) {
        StudentBean studentBean=new StudentBean();
        StudentBean studentBean1=new StudentBean();
        System.out.println(studentBean.equals(studentBean));
        //针对不同的对象返回不同的整数
        System.out.println(studentBean.hashCode()); //通过将该对象的内部地址转换成一个整数来实现的
        System.out.println(studentBean.hashCode());
    }
    }

    总结

      1) 对象相等则hashCode一定相等;

      2) hashCode相等对象未必相等。也就是说两个不同的对象也有可能hashCode(散列码(取余得出的))相同

      判断两个对象是否相等的条件:
      没有重写的话,只要hashCode不相等那么两个对象一定不相同, 
      重写的话,首先判断hashCode如果不一样,那么两个对象不相等,如果hashCode一样的话,再比较equals,如果true就相同,否则不相等。

      finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。也就是手动垃圾回收。

  • 相关阅读:
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    使用Jasmine和karma对传统js进行单元测试
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    nginx 基于IP的多虚拟主机配置
    Shiro 框架的MD5加密算法实现原理
    项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
    实用技巧:阿里云服务器建立公网物联网服务器(解决阿里云服务器端口,公网连接不上的问题)
  • 原文地址:https://www.cnblogs.com/xiaofuzi123456/p/10974496.html
Copyright © 2011-2022 走看看