Object类

    技术2022-07-10  151

    Object类

    类中的方法

    hashCode()/toString()/equals()这三个方法时我们今后在做项目时经常要调用的方法,尤其是在编写一个标准的Java类之后,我们常常重写这三个方法,标准的Java类又称为JavaBean, JavaBean的要求: 1.所有成员变量的访问权限:private 2.为每一个成员变量设置一对getter和setter 3.设置一个无参数和全参构造

    Person类

    package SE01.n1Object; public class Person { private String name; private int age; public String getName() {//为属性设置getter和setter return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, int age) {//有参构造 super(); this.name = name; this.age = age; } public Person() {//无参构造 super(); } @Override public String toString() {//重写toString return "Person [name=" + name + ", age=" + age + "]"; } @Override public int hashCode() {//重写hashCode final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) {//重写Equals if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }

    Test类

    public static void main(String[] args) { Person p=new Person("王五",12); System.out.println(p.toString()); p.setName("张三"); p.setAge(123); System.out.println(p.toString()); System.out.println(p.getAge()); System.out.println(p.getName()); System.out.println(p.hashCode()); System.out.println(p); /* * 看一个类是否重写toString,直接打印这个类的对象即可,如果没有重写toString(),那么打印的是对象的 * 类文件名全称@十六进制哈希吗 * */ Scanner sc=new Scanner(System.in); System.out.println(sc); //重写toString Random r=new Random(); System.out.println(r); //没有重写toString ArrayList list=new ArrayList(); list.add(1); list.add(2); System.out.println(list); //重写toString }

    Equals方法

    package SE01.n1Object; public class Demo02Equals { Person p1=new Person("小明",18); Person p2=new Person("小白",19); Person p3=new Person("小明",18); public static void main(String[] args) { Demo02Equals d=new Demo02Equals(); System.out.println(d.p1.equals(d.p2));//false System.out.println(d.p1.equals(d.p3));//true Person p1=new Person("小明",18); Person p2=new Person("小白",19); Person p3=new Person("小明",18); System.out.println(p1.hashCode());//hashCode=758222 System.out.println(p3.hashCode());//hashCode=758222 //由于Person类重写了hashCode()方法,所以p1和p3的hashCode值相等 System.out.println(p1.equals(p2));//false System.out.println(p1.equals(p3));//true //由于Person类重写了equals()方法,当两个引用的属性完全相同的时候,会返回true //默认是比较地址是否相同,很多时候并不符合业务需求,需要重写 // ▲equals()和==的区别 // ==可以用于比较基本数据类型的值(最小数据单元) // (对于基本数据类型:相同就是相等,相等就是相同) System.out.println(p1==p1);//true System.out.println(p1.equals(p1));//true // equals()只能比较两个对象是否相等 // (对于引用数据类型,相等不一定相同) System.out.println(p1==p3);//false System.out.println(p1.equals(p3));//true } }
    Processed: 0.025, SQL: 9