zoukankan      html  css  js  c++  java
  • Object和Objects

    Object

    在Java,Object类是超级父类,是所有类的父类。

        public boolean equals(Object obj) {
            return (this == obj);
        }
    	public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());//返回该对象实现类的“类名+@+hashcode”值
        }
    	public final native Class<?> getClass();//返回运行时该Class对象类型,常用于反射
    

    我们可以看到,equals方法判断的是2个对象是否是同一个对象。
    这里说下,在java中 “==” 是判断两个对象是否同一,而不是判断相等。因此Object类中的equals方法也是判断两个对象是否同一。要判断两个对象是否相等,就需要重写equals()方法。
    比如

        Person a = new Person("1");
        Person b = new Person("1");
        System.out.println(a.equals(b));
    	System.out.println(a.toString());
        System.out.println(b.toString());
    	//输出
    	false
    	com.google.common.base.Person@63961c42
    	com.google.common.base.Person@65b54208
    

    这段代码打印为false,为啥呢,根据Object的源码知道equls比较的是2个对象是否为同一个。但是很明显,a和b的内存地址不一致,因此二者不是同一个,所有打印false。
    但是在平时我们经常用equls方法判断2个字符串是否相等

            String a = new String("hello");
            String b = new String("hello");
            System.out.println(a.equals(b));
    		System.out.println(a.toString());        
    		System.out.println(b.toString());
    	//输出
    	    true
    		hello
    		hello
    	
    

    实际上,a和b仍然处于不同的内存地址。但是String类复写了Object的方法,因此造成该输出结果。具体可查看String源码。

    Objects

    Guava的Objects类功能比较单一,这里介绍jdk的java.util.Objects。
    Objects。类由一些操作对象的静态工具方法构成,这些工具方法包括了非空检查、方法的非空参数检查、比较对象的hashCode、为对象返回一个字符串表示、比较两个对象.
    该类由final修饰,该类的所有方法都是静态方法,调用简单,直接在实际应用中发掘,不在赘述。

  • 相关阅读:
    解决PyQt5在安装后无法找到Designer.exe问题,两个位置可供参考
    观察者模式
    策略模式
    模板方法模式(下)
    学过的技术容易忘,怎么办?
    Mysql主从配置
    Springboot处理CORS跨域请求
    SpringBoot学习2之注解简单配置Springboot+MyBatis
    Confluence7.4安装并破解汉化教程
    mysql json类型
  • 原文地址:https://www.cnblogs.com/ilovena/p/10110546.html
Copyright © 2011-2022 走看看