Java常用类之Object类-创新互联
Object类
文章标题:Java常用类之Object类-创新互联
网页路径:http://ybzwz.com/article/ddpjgg.html
- 超类、基类,所有类的直接或间接父类,位于继承树的最顶层(根类)。
- 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
- Object类中所定义的方法,是所有对象(包括数组)都具备的方法。
- Object类可以存储任何对象。
- 作为参数,可接受任何对象。
- 作为返回值,可返回任何对象。
- public final 类>getClass() {}
- 返回引用中存储的实际对象类型。
- 应用:通常用于判断两个引用中实际存储对象类型是否一致。
- public int hashCode() {}
- 返回该对象的哈希码值。
- 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值。
- 一般情况下相同对象返回相同哈希码。
- public String toString() {}
- 返回该对象的字符串表示(表现形式)。
- 可以根据程序需求覆盖(重写)该方法,如:展示各个属性值。
- public boolean equals(Object obj) {}
- 默认实现为(this==obj),比较两个对象地址是否相同。
- 可进行覆盖(重写),比较两个对象内容是否相同。
- equals()方法覆盖步骤:
- 比较两个引用是否指向同一个对象。
- 判断obj是否为null。
- 判断两个引用指向的实际对象类型是否一致。
- 强制类型转换。
- 依次比较各个属性值是否相同。
- equals()方法覆盖步骤:
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
例:
public class Student {//实例变量
private String name;
private int age;
//添加构造方法
public Student(String name, int age) {this.name = name;
this.age = age;
}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
public int getAge() {return age;
}
public void setAge(int age) {this.age = age;
}
//重写toString方法
@Override
public String toString() {return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//重写equals()方法
@Override
public boolean equals(Object obj){//1. 比较两个引用是否指向同一个对象。
if(this==obj){return true;
}
//2. 判断obj是否为null。
if(obj==null){return false;
}
//3. 判断两个引用指向的实际对象类型是否一致。
if(obj instanceof Student){//4. 强制类型转换。
Student s=(Student)obj;
//5. 依次比较各个属性值是否相同。
if(this.name.equals(s.getName())&&this.age==s.getAge()){return true;
}
}
return false;
}
}
//测试
public class TestStudent {public static void main(String[] args) { Student s1=new Student("xxx",20);
Student s2=new Student("www",22);
//getClass方法:判断s1和s2是不是同一个类型
Class class1=s1.getClass();
Class class2=s2.getClass();
if (class1==class2){System.out.println("s1和s2是同一个类型");
}
else{System.out.println("s1和s2不是同一个类型");
}
//hashCode方法
System.out.println(s1.hashCode()); //返回1784662007
System.out.println(s2.hashCode()); //返回997110508
Student s3=s1;
System.out.println(s3.hashCode()); //返回1784662007,与s1相同
//在栈里面有两个变量s1和s3,这两个变量都指向堆里的同一个对象
//toString方法
System.out.println(s1.toString()); //返回Student{name='xxx', age=20}
System.out.println(s2.toString()); //返回Student{name='www', age=22}
//equals方法:判断两个对象是否相等
System.out.println(s1.equals(s2)); //返回false
Student s4=new Student("aaa",17);
Student s5=new Student("aaa",17);
System.out.println(s4.equals(s5)); //没有重写equals()方法之前返回false,重写之后返回true
}
}
本人学习笔记,若有错误或者不足之处,欢迎大家积极交流并给予指正。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:Java常用类之Object类-创新互联
网页路径:http://ybzwz.com/article/ddpjgg.html