• object类的一些方法


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


    前言

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

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


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


    Object类

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

    输出对象地址

    一.object类里的tostring方法

    1. package 接口;
    2. //object类
    3. class ePerson{
    4. public String name="hello";
    5. @Override
    6. public String toString() {
    7. return "ePerson{" +
    8. "name='" + name + '\'' +
    9. '}';
    10. }
    11. }
    12. class eStudent{
    13. }
    14. public class Text5 {
    15. public static void func(Object o){
    16. System.out.println(o.toString());
    17. }
    18. public static void main(String[] args) {
    19. // Object o=new Object();
    20. ePerson e=new ePerson();
    21. // func(o);
    22. func(e);
    23. }
    24. }

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

    正确输出对象里内容

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

    判断俩个对象大小:

    ePerson类:

    1. class ePerson{
    2. public String id;
    3. public ePerson(String id) {
    4. this.id = id;
    5. }
    6. @Override
    7. public String toString() {
    8. return "ePerson{" +
    9. "id='" + id + '\'' +
    10. '}';
    11. }
    12. }

    直接==比较:

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

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

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

    二.object类里的equlas方法:

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

     还是比较地址类似于==

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

    1.在eperson类重写equals方法

    1. @Override
    2. public boolean equals(Object o) {
    3. ePerson tmp=(ePerson) o;
    4. return this.id.equals(tmp.id);
    5. }

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

    2.在test中调用equals

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

    此时返回true

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

    1. @Override
    2. public boolean equals(Object o) {
    3. if(o==null){
    4. return false;
    5. }
    6. else if(this==o){
    7. return true;
    8. }
    9. else if(!(o instanceof ePerson){
    10. return false;
    11. }
    12. ePerson tmp=(ePerson) o;
    13. return this.id.equals(tmp.id);
    14. }

    解释一下:

    总结:

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

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

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

    定位对象的位置

    object类里的hashcode方法

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

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

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

    重写object类的hashcode方法:

    1. @Override
    2. public int hashCode() {
    3. return Objects.hash(id);
    4. }

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

    总结:

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

  • 相关阅读:
    深度操作系统 15.2——怀揣梦想,笃定前行
    【matplotlib 实战】--漏斗图
    JVM篇---第二篇
    wps卸载和重新安装
    成都榆熙电子商务有限公司:获得更多的自然流量需要商家们做些什么?
    inf和nan
    C++菜鸟日记1
    基于 Python 的高考志愿高校及专业分析系统
    职场「OKR」,魔幻又内卷
    第9章:项目实战
  • 原文地址:https://blog.csdn.net/panpanaa/article/details/127942186