==和equals关系

案例1:equals和==应用

package com.lian.pojo.f;

import java.util.Objects;

/**
 * 1、== 用于基本类型来说,byte、short、int、long、float、double等,笔记的是两个基本数据的值是否相等
 * 2、== 用于引用类型来说,比较的是两个对象的引用地址是否相等
 * 3、equals 只能用于比较引用类型,比较的是 两个对象的值 是否相等
 * 4、hashcode 两个对象equals比较如果相等,则两个对象的hashcode值一定相等
 *            两个对象的hashcode值如果相等,但两个对象equals不一定相等
 *            就好比 两个商品如果一模一样,那么它的价格是相等的,但是两个相同的价钱可以有不同的商品
 * 5、== 两个对象的引用地址如果相同,说明它们指向同一个对象,类似一个屋子(对象)里的两把钥匙(引用地址),这两个对象equals一定相同
 */
public class A {
    public static void main(String[] args) {
        Person p1 = new Person("pi", 2);
        Person p2 = new Person("pi", 2);
        System.out.println("value: "+p1.equals(p2));
        int h1 = p1.hashCode();
        int h2 = p2.hashCode();
        System.out.println(h1);
        System.out.println(h2); 
    }
}

class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

案例2:源码探究

package com.lian.pojo.f;

public class B {
    public static void main(String[] args) {

        /**
         * String类重写了Object父类的equals方法,比较了两个对象的引用地址和对象的值
         * public boolean equals(Object anObject) {
         *         if (this == anObject) {
         *             return true;
         *         }
         *         if (anObject instanceof String) {
         *             String anotherString = (String)anObject;
         *             int n = value.length;
         *             if (n == anotherString.value.length) {
         *                 char v1[] = value;
         *                 char v2[] = anotherString.value;
         *                 int i = 0;
         *                 while (n-- != 0) {
         *                     if (v1[i] != v2[i])
         *                         return false;
         *                     i++;
         *                 }
         *                 return true;
         *             }
         *         }
         *         return false;
         *     }
         */
        String s1 = new String();
        String s2 = new String();
        boolean b = s1.equals(s2);
        System.out.println("b: "+b);  //true 

        /**
         * Object对象只比较了两个对象的引用地址是否相等
         * public boolean equals(Object obj) {
         *         return (this == obj);
         *     }
         */
        Object o1 = new Object();
        Object o2 = new Object();
        boolean o = o1.equals(o2);
        System.out.println("o: "+o); //false

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值