zoukankan      html  css  js  c++  java
  • == 和 equals方法

    == 是运算符

    == 是运算符,比较的是堆内存中地址是否相等
    对于基本数据类型或常量字符串来说,可以直接用来比较值是否相等(基本数据类型 或者 常量字符串在方法区中的常量池里面以HashSet策略存储起来的,一个常量只会对应一个地址);
    对于引用数据类型(类、接口、数组)来说,用来比较是否是同一对象(地址是否相同)

    equals() 是方法

    equals() 是Object类的方法,底层也是用的 ==

    Object:
    
        public boolean equals(Object obj) {
            return (this == obj);
        }
    

    如果需要比较值是否相同,则需要重写equals()方法
    例如String类的equals方法

    String:
    
    public boolean equals(Object anObject) {
            if (this == anObject) { // 首先比较引用对象的地址
                return true;
            }
            if (anObject instanceof String) { //该实例是否属于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;
        }
    

    测试下
    撸代码:

     @Test
        public void testString(){
    
            System.out.println("基本数据类型:");
            System.out.println(1 == 1); // true
            System.out.println('a' == 'a'); //true
    
            System.out.println("引用数据类型:");
            String s1 = new String("hello");
            String s2 = new String("hello");
            System.out.println(s1 == s2); // false
            System.out.println(s1.equals(s2)); //true  String类中equals()方法被重写
    
            System.out.println("自定义类 重写equals()方法:");
            Person na2 = new Person(12, "na");
            Person na1 = new Person(12, "na");
            System.out.println(na1 == na2); // false
            System.out.println(na1.equals(na2)); //true,如果不重写equals方法。默认是从Object类继承过来的方法,则返回false
        }
    

    自定义类重写equals方法

    自定义类:
    
    class Person{
        int age;
        String name;
    
        public Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        /**
         * 如果不重写equals()方法,则还是用父类Object的方法
         * @param o
         * @return
         */
        @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(age, name);
        }
    }
    
    
  • 相关阅读:
    git的使用
    模块化的 require 和 import的区别
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二)commonJS规范和AMD规范
    Javascript模块化编程发展历史
    GULP的使用流程
    jQuery事件对象
    jQuery文档处理 |
    Vue学习笔记【12】——过滤器
    Vue学习笔记【11】——Vue调试工具vue-devtools的安装步骤和使用
  • 原文地址:https://www.cnblogs.com/HappyKnockOnCode/p/15589581.html
Copyright © 2011-2022 走看看