zoukankan      html  css  js  c++  java
  • Java Object类及其equals方法

    首先看一道面试题

    描述==与equals的区别
    给出的答案是:==是一个运算符。
    Equals是string对象的方法,可以.出来。

    个人觉得嗯,缺点啥~~~ 这边的equals指的是什么呢?

    首先说说Object中的equals吧


    基本概念:

    • Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入;
    • Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。可以使用类型为Object的变量指向任意类型的对象

    equals()方法:比较两个对象是否同一

          如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等。如果两个引用对象指的是同一个对像,则称这两个变量同一。Object类中定义的equals 函数原型为:

    public boolean equals(Object);他是判断两个对象是否同一,并不是是否相等

     

    •  ①只能处理引用类型变量
    •  ②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等
    package com.example.demo.test;
    
    public class Person {
    
        private String userName;
        private String age;
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }
    

     

    package com.example.demo.test;
    
    public class Test {
    
        public static void main(String[] args) {
            Person p1 = new Person();
            Person p2 = new Person();
            System.out.println(p1.equals(p2));
            System.out.println(p1 == p2);
    
            /*
             * String类重写了Object类的equals()方法,比较是两个对象的实体内容"是否完全相同。
             */
            String s1 = new String("AA");
            String s2 = new String("AA");
            System.out.println(s1.equals(s2));
            System.out.println(s1 == s2);
        }
    }
    

      

     

    从运行结果可以看到的是Object中的equals方法比较的是两个对象是否同一,

    而String类中的equals方法比较的是字符串的value是否相等。 请看String.java中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;
        }
    

      

  • 相关阅读:
    (资源搜索类)几个好用的磁力搜索网站
    百度网盘不限速,直接获取直链
    百度网盘偷偷更新,免费也终于不限速了
    ES6新特性之箭头函数与function的区别
    [亲测可用]BCompare文件比较对比工具4.3.4绿色版
    Autofac 动态获取对象静态类获取对象
    Linq to SQL 语法整理(子查询 & in操作 & join )
    小程序监听页面滚动开始和滚动结束
    C# Task.Run 和 Task.Factory.StartNew 区别
    Entity Framework Core必须牢记的三条引用三条命令
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/10553414.html
Copyright © 2011-2022 走看看