首页 > 编程学习 > object类的一些方法

object类的一些方法

发布时间:2022/11/20 21:40:59

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

目录

前言

Object类

1.输出对象地址

一.object类里的tostring方法:

正确输出对象里内容

2.判断俩个对象大小:

二.object类里的equlas方法:

自己实现一个equals来比较内容是否相同

总结:

3.定位对象的位置

object类里的hashcode方法

重写object类的hashcode方法:

总结:



前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考


Object类

Object类是所有类的祖先,一切类默认继承object

输出对象地址

一.object类里的tostring方法:

package 接口;
//object类
class ePerson{
    public String name="hello";

    @Override
    public String toString() {
        return "ePerson{" +
                "name='" + name + '\'' +
                '}';
    }
}
class eStudent{

}
public class Text5 {
    public static void func(Object o){
        System.out.println(o.toString());
    }
    public static void main(String[] args) {
//        Object o=new Object();
        ePerson e=new ePerson();
//        func(o);
        func(e);
    }

}

如果不重写tostring输出:java.lang.Object@776ec8df,这是object默认的tostring方法

正确输出对象里内容

重写输出:ePerson{name='hello'},这是自己实现的tostring方法(方法重写)

判断俩个对象大小:

ePerson类:

class ePerson{
    public String id;

    public ePerson(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "ePerson{" +
                "id='" + id + '\'' +
                '}';
    }
}

直接==比较:

 public static void main(String[] args) {
        ePerson person1=new ePerson("123");
        ePerson person2=new ePerson("123");
        System.out.println(person1 == person2);
    }

这时输出false,为啥不是true呢,对象不同(地址不同)person1,person引用的地址不同

 这时我们如果直接调用object类中equals呢?

二.object类里的equlas方法:

如果直接调用object类中equals发现:

 还是比较地址类似于==

自己实现一个equals来比较内容是否相同

1.在eperson类重写equals方法

   @Override
    public boolean equals(Object o) {
      ePerson tmp=(ePerson) o;
      return this.id.equals(tmp.id);
    }

注意,id是string类型,string也重写了equals方法,返回的equals是string写好的equals来比较内容相同

2.在test中调用equals

System.out.println(person1.equals(person2));

此时返回true

此时自己实现的还有缺陷(忽略了特殊情况),这个比较完整:

 @Override
    public boolean equals(Object o) {
        if(o==null){
            return false;
        }
       else if(this==o){
            return true;
        }
       else if(!(o instanceof ePerson){
           return false;
        }
      ePerson tmp=(ePerson) o;
      return this.id.equals(tmp.id);
    }

解释一下:

总结:

object类equals是判断对象内容是否相同

一般自定义的类型都得重写equals方法,来判断内容相同

如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同

定位对象的位置

object类里的hashcode方法

底层比较复杂c++实现,将这个地址以16进制输出。

 ePerson person1=new ePerson("123");
        ePerson person2=new ePerson("123");
        //将来我也想把他们放到同一个位置
        person1.hashCode();
        person2.hashCode();

此时俩个对象输出的地址是不一样

重写object类的hashcode方法:

 @Override
    public int hashCode() {
        return Objects.hash(id);
    }

注意这里调用的是Objects类的hash算法

总结:

当我们自己定义对象时建议都重写equals和hashcode方法,来满足需求

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式