Object
Object是每一个对象的顶级父类,也就是说我们所有的类的父亲都是他。这个包位于java.lang并且我们不需要收到导入这个包。该类方法众多,我们并不对它全部总结…在这里仅仅写几个常用方法。
getClass()
返回当前的运行时类。
package day08;
public class object {
public static void main(String[] args) {
A a = new A();
System.out.println(a.getClass().getName());
a.play();
}
}
class A{
int a;
String b;
void play() {
System.out.println(getClass());
}
}
运行结果就是:
day08.A
class day08.A
原因就是因为我们运行该方法的类为day08包中的A类。
hashCode()
返回该对象的哈希码值(就是地址经过数据结构处理后的一种形式)
System.out.println(a.hashCode());
得到的是一串数值:1829164700
toString()
该方法默认返回对象的地址值。
public class object {
public static void main(String[] args) {
A a = new A();
System.out.println(a.toString());
}
}
class A{
int a;
String b;
}
此时的运行结构0为:
day08.A@15db9742
也就是说它的返回值是 类的全路径名称+它的哈希码值,这是它的源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
但是网上大部分回答都是它的返回值说对象的字符串表示原因是因为我们在后续的过程中对其进行了重写。方式为:
public String toString() {
return "["+a+","+b+"]";
}
equals()
首先我们知道这个方法不能用于八大基本类型的比较。
说道这个方法了,我们就说一下它与“= =”的区别。
我们首先说“= =”,我们要明白基本数据类型(也称原始数据类型):他们之间的比较,应用双等号(= =),比较的是他们的值。
引用数据类型:当他们用(= =)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。
public class object {
public static void main(String[] args) {
String s1 = new String("wxn");
String s2 = new String("wxn");
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
}
}
此时两者是不等于的。
在String中 equals()方法则表示的是内容是否相同。
public class object {
public static void main(String[] args) {
String s1 = "wxn";
String s2 = "wxn";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
}
}
看这个代码由于是字符串常量赋值的所以地址一样,两个就都是true了。
public class object {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
System.out.println(a1==a2);//false
System.out.println(a1.equals(a2));//false
}
}
class A{
}
此时都为false 原因在于equals()方法在除了String以外的类中调用判断条件是:判断他们所指向的对象是否一致。
为了便于理解,我把equals()方法的源码放在这里:
String类中重写后:
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;
}
其余类中的定义:
public boolean equals(Object obj) {
return (this == obj);
}