Object类
Object类
Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object类,拥有Object类的方法。

示例:
public class Person{}
<=>
public class Person extends Object {}
使用Object可以接收任意的引用数据类型。
示例:
public class Person{
public static void main(String[] args) {
Person person = new Person();
show(person);
}
public static void show(Object o) {
System.out.println(o);
}
}
运行结果:
1.toString方法
建议每个子类都重写这个方法。

示例:
/**
* Person类
* @author 孟祥宽
*
*/
public class Person{
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
/**
* 测试类
* @author 孟祥宽
*
*/
public class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.toString());
}
}
运行结果:
toString()源码如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());// 默认返回的是类名加上哈希码
}
如果想要展示我们想要展示的信息则需要重写toString()方法:
/**
* Person类
* @author 孟祥宽
*
*/
public class Person{
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
this("默认名字",15);
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
/**
* 重写toString
*/
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名:" + this.name + ";\n年龄:" + this.age;
}
}
/**
* 测试类
* @author 孟祥宽
*
*/
public class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.toString());// <=> System.out.println(person);
/*
因为println() 方法 如果参数是字符串 执行这个方法
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
但是参数是对象的时候执行
public void println(Object x) {
String s = String.valueOf(x);
--这个valueOf()的源码:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();// 他会执行Object的toString()方法;
}
--
synchronized (this) {
print(s);
newLine();
}
}
*/
}
}
重写之后再执行:
2.equals方法

最好创建一个类就重写一个equals方法。
/**
* 重写equals
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
※ == 和 equals 区别:
== 比较的是虚拟地址,equals比较的是地址中储存的值。
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
String str1 = "基本信息";
String str2 = "基本信息";
String str3 = new String("基本信息");
String str4 = new String("基本信息");
int a = 1;
int b = 1;
/**
* == 比较的是内存地址
*/
System.out.println(person1.equals(person2));// false 因为person1和person2的地址
System.out.println(person1 == person2);// false 同上
System.out.println("-----------------");
System.out.println(str1);
System.out.println(str2);
System.out.println("**********");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println("基本信息".hashCode());// 获取“基本信息”的虚拟地址
System.out.println("**********");
System.out.println(str1 == str2);// true str1和str2是同一个虚拟地址
System.out.println(str1.equals(str2));// true 这个调用的是String类里重写的equals方法判断是值
// System.out.println(a == b);
System.out.println("-----------------");
System.out.println(str3);
System.out.println(str4);
System.out.println(str3 instanceof String);
System.out.println(str3 == str4);// false new关键字开辟不同的堆内存 虚拟地址不一致
System.out.println(str3.equals(str4));// true 这个调用的是String类里的equals方法
}
未完待续...

浙公网安备 33010602011771号