zoukankan      html  css  js  c++  java
  • Java-Object

    java当中最顶层的一个类,我们写的所有的类,默认都会继承Object类
    1) toString():用来描述当前对象的信息,但是sun建议我们设计新的类,最好能重写该方法
    默认情况下:返回是包名+类名@+十六进制字符串
    输出对象的时候,默认调用toString方法

    public class Test1 {
        public static void main(String[] args) {
            User user=new User();
            System.out.println(user.toString());
        }
    }
    class User{
    //重写User从Object中继承过来toString方法
        public String toString(){
            String name="User类的对象";
            return name;    
        }
    }
    public class Test1 {
        public static void main(String[] args) {
            Teacher teacher=new Teacher("张",5000,"男");
            System.out.println(teacher);
        }
    }
    class Teacher{
        String name;
        double salary;
        String sex;
        Teacher(String name,double salary,String sex){
            this.name=name;
            this.salary=salary;
            this.sex=sex;
        }
        public String toString(){
            String message="Teacher类的对象名字是:"+name+"工资是:"+salary+"性别是:"+sex;
            return message;
        }
    }

    2) hashcode()
    返回值就是该对象在内存中地址转化以后的一个数字
    sun规定:如果判断一个类的两个对象,如果相等,两个对象hashcode(),返回值,必须一致
    如果我们要对对象是否相等,进行判断的话,首先必须要重写hashcode()

    public class Test1 {
        public static void main(String[] args) {
            Student student=new Student();
            System.out.println(student.hashCode());//结果:2018699554
        }
    }
    class Student extends Object{
    }

    3) equals()
    1. ==:相等
    基本数据类型:“==”-->相等,eg:1==1
    引用数据类型:“==”-->两个对象的物理地址相同(同一个对象)
    2. 引用数据类型如何判断两个对象是否相等?
    equals():返回值是false,不相等,如果返回值是true,相等
    3. sun公司建议:如果需要判断两个对象是否相等,则必须重写hashcode()方法和equals()方法
    hashcode():只要对象相等,hashcode()方法返回值,也必然相等
    equals():首先是要比较的对象是否为null,任何对象跟null,永远都是不相等的,使用返回值是false
            其次判断要比较的两个对象的地址是否相等,如果地址相等,则必然是同一个对象,返回值是true
            之后判断要比较的两个对象的类是否一致,只有同一个类型的两个对象,才可以比较
    对象 instanceof 类型:如果该对象是类型的一个对象,则结果为true,反正false
            最后由我们自己来指定比较的规则,一般是判断其某些属性的值是否一致

    public class Test1 {
        public static void main(String[] args) {
            Student1 s1=new Student1("刘",12);
            Student1 s2=new Student1("刘",12);
            //"==":(引用类型)用来判断两个对象的地址是否一致
            //s1是一个单独的对象,应该属于s1的地址
            //s2也是一个单独的对象,也有属于s2的地址
            //两个不同的对象,地址必然不同,同一个地址只能有一个对象
            System.out.println("s1==s2"+(s1==s2));//结果:s1==s2false
            System.out.println(s1.hashCode());//结果:12
            System.out.println(s2.hashCode());//结果:12
            //equals():默认是用"=="来比较两个对象是否相等
            boolean flag=s1.equals(s2);
            System.out.println(flag);//结果:true
            //sun建议:引用类型对象比较是否相等,必须要重写hashcode()(只需要保证两个对象如果相等,该方法返回值一致即可)
            //equals()(由程序员自己来指定两个对象相等的规则)
            Student1 stu1=new Student1("刘",55);
            Student1 stu2=new Student1("刘",66);
            Student1 stu3=new Student1("刘",66);
            System.out.println("stu1和stu2是否相等"+stu1.equals(stu2));//结果:stu1和stu2是否相等false
            System.out.println("stu2和stu3是否相等"+stu2.equals(stu3));//结果:stu2和stu3是否相等true
            System.out.println("stu1和null是否相等"+stu1.equals(null));//结果:stu1和null是否相等false
            System.out.println("stu1跟自己是否相等"+stu1.equals(stu1));//结果:stu1跟自己是否相等true
        }
    }
    class Student1{
        String name;
        int age;
        Student1(String name,int age){
            this.name=name;
            this.age=age;
        }
        public int hashCode() {  //重写hashcode()
            return age;
        }
        public boolean equals(Object obj) {  //重写equals()
            //obj:要比较的对象
            if(obj==null){ //null
                return false;
            }
            if(this==obj){ //(this:当前的对象),是否是同一个对象
                return true;
            }
            if(obj instanceof Student1){ //同一类型(对象 instanceof 类型:判断对象是否属于该类型)
                //由我们自己来设置,只要name属性和age属性的值一致,就认为是相等的
                //把obj转化为Student类型
                Student1 stu=(Student1)obj;
                if(this.name.equals(stu.name)&&this.age==stu.age){
                return true;
                }
            }
            return false;
        }    
    }
  • 相关阅读:
    97. 交错字符串-7月18日
    如何判断一个区块链项目的好坏?
    不知道这10点,千万别用SaaS
    数字人民币应用的五大猜想!你最关心哪个?
    什么是人工智能核心?这2个功能上线
    大数据的七大核心具体价值
    机器学习操作正在兴起
    每个大数据架构师都需要的6个基本技能
    数据之美:可视化会给你意想不到的答案!
    如何采用人工智能创建自动化运营的数据中心
  • 原文地址:https://www.cnblogs.com/lilyo/p/12792825.html
Copyright © 2011-2022 走看看