Java Object类

Object类位于java.lang包,是所有Java类的祖先。Java中的每个类都是由这个类扩展而来。

定义Java类时如果没有显式的指明父类,那么就默认继承了Object类。

public class Demo {//默认继承了Object类
    //...
}

在Java中,只有基本类型不是对象。例如数值,字符和布尔型的值都不是对象,是基本数据类型。而所有的数组类型,不管是对象数组还是基本类型数组都是继承了Object类。

int[] intArr=new int[]{1,2,3};
System.out.println(intArr.equals(null));//intArr数组对象调用了父类Object的equals()方法

Object类中定义了一些有用的方,由于是根类,所以这些方法都在其他类中存在,一般是进行了重载或者覆盖,实现了各自自己的具体功能。

比如String类就覆盖了Object类的equals()方法。

equlas()方法

Object类中的equlas()方法用来检测两个对象是否等价,查看Object源码为:

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

用的是==比较符。

在Java中,数据等价的基本含义是指两个数据的值相等。在通过Object的equals()方法比较可以看出实际上是“==”来进行比较。对象比较的是引用,即对象在内存中的内存地址,而基本数据类型比较的是值。

在String类中,就重写(覆盖)了Object的equals()方法,String类比较的是字符串是否相等,也就是值相等即可。查看源码可以得知:

    //重写了Object类中的equlas()方法    
    public boolean equals(Object anObject) {
        //判断两个字符串的内存地址是否相等,如果相等,就说明这两个字符串是同一个
        if (this == anObject) {
            return true;
        }
        //判断参数对象是不是String类型的
        if (anObject instanceof String) {
        	//如果是,就向上转型成一个String对象
            String anotherString = (String)anObject;
            //对字符串逐个字符进行比较,每个字符都相等,返回true
            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;
    }

hashCode()方法

散列码(hashCode)是按照一定的算法由对象得到的一个数值,散列码没有规律。如果 x 和 y 是不同的对象,x.hashCode() 与 y.hashCode() 基本上不会相同。

hashCode() 方法主要用来在集合中实现快速查找等操作,也可以用于对象的比较。

简单的说,如果两个对象相同,那么它们的hashCode值一定相同;如果两个对象的hashCode值相同,它们并不一定相同。在Java规范里面规定,一般是重写equals()方法应该连带着重写hashCode()方法。

toString() 方法

toString()方法是Object类中定义的一个重要方法,是对象的字符串表示形式,查看源码:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

返回值是String类型,用于描述当前对象的有关信息。Object类中实现的toString()方法是返回当前对象的类型和内存地址信息,但在一些子类(如String、Date等)中进行了重写,也可以根据需要在用户自定义类中重写这个方法。

除了显式的调用对象的toString()方法外,在进行String与其他类型数据的连接操作时,会自动调用toString()方法,而在输出每个对象时,也是自动调用toString()方法。

public class Test {

	public static void main(String[] args) {
		String str="123456";
		System.out.println(str);
		System.out.println(str.toString());
		
		A a=new A();
		System.out.println(a);
		System.out.println(a.toString());
	}
	

}
class A {

	@Override
	public String toString() {
		return "我是A类的toString()方法的返回值";
	}
	
}

运行结果为:

123456
123456
我是A类的toString()方法的返回值
我是A类的toString()方法的返回值

猜你喜欢

转载自blog.csdn.net/xkfanhua/article/details/80566870