zoukankan      html  css  js  c++  java
  • Object类

    类层次结构最顶层的基类,所有类直接或间接的继承自Object类。

    Object()构造方法,构造一个对象,所有子类对象初始化都会优先调用该方法

    Java.base->java.lang->Object->hashCode(),getClass(),toString(),equals()

    int hashCode():返回对象的哈希码值,该方法通过对象的地址值进行计算,不同对象的返回值一般不同

    Class<?>getClass():返回调用此方法的运行时类对象,该类的字节码文件

    String  toString():返回该对象的字符串表示

    boolean equals():返回其它某个对象是否与此对象“相等”,默认情况下比较两个对象的地址值,没什么意义,建议子类重写这个方法。

    package com.wang.object;
    
    public class Demo01 {
        public static void main(String[] args) {
            //非静态方法的调用方式,通过对象名.的形式调用
            Object o1=new Object();
            Object o2=new Object();
            //测试Object类中的成员方法
            int code1=o1.hashCode();//不同对象的哈希码值一般不同,哈希码值就是根据地址值计算出来的数字
            int code2=o2.hashCode();
            System.out.println(code1);
            System.out.println(code2);
            System.out.println("===================================");
            Class class1=o1.getClass();//字节码文件 一个类的字节码文件一样
            Class class2=o2.getClass();
            System.out.println(class1);
            System.out.println(class2);
            System.out.println("===================================");
            String s1=o1.toString();
            String s2=o2.toString();
            //打印的是地址值。不同对象的地址值不同
            //地址值的组成:全类名(包名+类名)+@+该对象的哈希码的无符号十六进制
            System.out.println(s1);
            System.out.println(s2);
            System.out.println("========================================");
            //比较两对象是否相等,默认比较的是地址值,无意义,因为不同对象的地址值一定不一样。子类一般都会重写这个方法
            boolean b1=o1.equals(o2);
            System.out.println(b1);
        }
    }

    JavaBean重写Object类的方法

    需求:开发中通常需要将对象转化成字符串形式进行传输,也需要对即将使用的对象进行相等判断。定义标准JavaBean类,重写toString和equals方法

    步骤:

    ①定义标准JavaBean类Student,属性id、name、score

    ②重写toString():该对象的字符串表现形式,一般都是包含所有属性值且具有一定的格式的字符串

    ③重写equals():通过关键属性id来确定该类的两个对象是否相同,可以比较所有属性值

    ④创建Student对象并使用

    package com.wang.object;
    
    public class Demo02 {
        public static void main(String[] args) {
            //测试toString
            Student s1=new Student("001","王迎婧",100);
            //输出语句直接打印对象,默认调用了该对象的toString方法
            //重写toString方法后测试
            System.out.println(s1);
            System.out.println(s1.toString());
           //测试equals方法
            Student s2=new Student("002","往往",99);
            System.out.println(s1.equals(s2));
    
        }
    }
    class Student{
        private String id;
        private String name;
        private int score;
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setScore(int score) {
            this.score = score;
        }
    
        public int getScore() {
            return score;
        }
        public Student(){}
        public Student(String id,String name,int score){
            this.id=id;
            this.name=name;
            this.score=score;
        }
        @Override
        public String toString() {
            return "Student{id="+id+", name='"+name+"', score="+score+"}";
        }
    
       /* @Override
        public boolean equals(Object obj) {
            //向下转型
            Student s2=(Student)obj;
            //在实际开发中会比较对象的每一个属性,不会仅仅比较id
            return this.id==s2.id;
        }
        */
        //自动生成的步骤 右键-generate-equals和hashCode
        @Override
        public boolean equals(Object o) {
            //this:s1   o:s2
            //比较两个对象的地址值是否相同
            if (this == o) return true;
            //判断要比较的两个对象是否是同一个类型的对象
            if (o == null || getClass() != o.getClass()) return false;
            Student student = (Student) o;
            return score == student.score &&
                    id.equals(student.id) &&
                    name.equals(student.name);
        }
        @Override
        public int hashCode() {
            return Objects.hash(id, name, score);
        }
    }
  • 相关阅读:
    最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
    yield再理解--绝对够透彻
    解决pyspider框架web预览框过小问题
    python中的可哈希与不可哈希
    python json.dumps 中的ensure_ascii 参数引起的中文编码问题
    LeetCode 297. 二叉树的序列化与反序列化 | Python
    LeetCode 1300. 转变数组后最接近目标值的数组和 | Python
    LeetCode 30. 串联所有单词的子串 | Python
    LeetCode 739. 每日温度 | Python
    LeetCode 128. 最长连续序列 | Python
  • 原文地址:https://www.cnblogs.com/wyj96/p/11767206.html
Copyright © 2011-2022 走看看