解析java中的Object类(一)
1 是什么?
Object类指的是java.lang.Object这个类,然后这个类是所有子类的直接父类和间接父类。若一个类中没有显示的继承类(无 extends 其他类),则它默认继承Object类
2 作用
Object类里面提供一些方法,这些方法都是被子类去重写,以便于实现子类自己的需求
3 如何用
3.1 toString方法
3.1.1 Object类里面的toString方法源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3.1.2 分析
a 前提
打印对象名时实际上就是打印对象名.toString()
b getclass
内容
获取调用者所在类名(class 包名.类名),如果是多态,就显示的是子类所在的包名.类名
示例代码
Dog类
package Work;
public class Dog {
private String name;
//名字
private String type;
//类型
private int age;
//年龄
public Dog() {
}
public Dog(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test类
package Work;
public class Test{
public static void main(String[] args) {
Dog d1=new Dog("旺财","金毛",10);
System.out.println(d1.getClass());
}
}
示例代码运行截图
c getName
内容
通常和getClass配合使用,用于得到具体的类名(除去class),类名也是以包名.类名的方式显示的
示例代码
Dog类
package Work;
public class Dog {
private String name;
//名字
private String type;
//类型
private int age;
//年龄
public Dog() {
}
public Dog(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test类
package Work;
public class Test{
public static void main(String[] args) {
Dog d1=new Dog("旺财","金毛",10);
System.out.println(d1.getClass().getName());
}
}
示例运行截图
c hashcode
内容
返回该对象的哈希码值,它是根据内存地址算出来的,它具有唯一性
示例代码
Dog类
package Work;
public class Dog {
private String name;
//名字
private String type;
//类型
private int age;
//年龄
public Dog() {
}
public Dog(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test类
package Work;
public class Test{
public static void main(String[] args) {
Dog d1=new Dog("旺财","金毛",10);
System.out.println(d1.hashCode());
//不会因为空间里面的属性更改而更改
d1.setName("德福");
System.out.println(d1.hashCode());
}
}
示例运行截图
c toHexString方法
内容
Integer包装类里面的一个公开的(public)静态方法,可以通过类名.方法名的形式调用
然后目的是将传入的整数转换成一个16进制的数字,该数字以String类型的方式进行返回.
示例代码
Test类
package Work;
public class Test{
public static void main(String[] args) {
int a=460141988;
//转换成一个16进制的数字,以字符串的形式保存(返回)
String str=Integer.toHexString(a);
System.out.println(str);
}
}
示例运行截图
3.2 equals()方法
3.2.1 Object类里面的equals方法源码
public boolean equals(Object obj) {
return (this == obj);
}
3.2.2 分析
a 前提
==比较的两种情况
若==左右两边都是基本数据类型的变量,那么比较的就是两个变量的值
示例代码
package Work;
public class Test{
public static void main(String[] args) {
int a=10;
int b=10;
System.out.println(a==b);
}
}
示例运行截图
若==左右两边都是引用数据类型,那么就算比较两个引用保存的内存地址是否相等
示例代码
Dog类
package Work;
public class Dog {
private String name;
//名字
private String type;
//类型
private int age;
//年龄
public Dog() {
}
public Dog(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test类
package Work;
public class Test{
public static void main(String[] args) {
Dog d1=new Dog("旺财","金毛",5);
Dog d2=new Dog("旺财","金毛",5);
Dog d3=d2;
System.out.println(d1==d2);
System.out.println(d2==d3);
}
}
示例代码运行截图
b 本质
Object里面的equals方法本质就是比较两个引用(对象)的内存地址是否相等
d 示例代码
Dog类
package Work;
public class Dog {
private String name;
//名字
private String type;
//类型
private int age;
//年龄
public Dog() {
}
public Dog(String name, String type, int age) {
this.name = name;
this.type = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Test类
package Work;
public class Test{
public static void main(String[] args) {
Dog d1=new Dog("旺财","金毛",5);
Dog d2=new Dog("旺财","金毛",5);
Dog d3=d2;
System.out.println(d1.equals(d2));
System.out.println(d2.equals(d3));
}
}