Object类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/04b4bf5485548ebe98db982195d675f6.png)
getClass()方法 反射中有详细讲解 返回class对象
hashCode()方法 返回对象的哈希码值
哈希值根据对象的地址或字符串或数字使用hash算法 计算出来的int类型的数值
一般情况下相同对象返回相同的哈希值
toString 返回字符串表示 可以根据需求 覆盖
重写前
Object01.Student@1b6d3586
Object01.Student@4554617c
equals() 比较是不是同一地址
package Object01;
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"对象已被删除");
}
}
package Object01;
public class HashCode {
public static void main(String[] args) {
Student s1 = new Student("age",20);
Student s2 = new Student("bbb",22);
Class class1 = s1.getClass();
Class class2 = s1.getClass();
if(class1 == class2){
System.out.println("s1 s2 同类型");
}else{
System.out.println("s1 s2 不同类型");
}
System.out.println("=======================");
Student s3 =s1;
int h1 = s1.hashCode();
int h2 =s2.hashCode();
int h3 =s3.hashCode();
int ch1=class1.hashCode();
int ch2=class1.hashCode();
System.out.println(h1);
System.out.println(h2);
System.out.println(h3);
System.out.println(ch1);
System.out.println(ch2);
System.out.println("================");
System.out.println(s1.toString());
System.out.println(s2.toString());
System.out.println("=====================");
Student s4 = new Student("小明",17);
Student s5 = new Student("小明",17);
if(s4.equals(s5)){
System.out.println("s4 s5 相同");
}else {
System.out.println("s4 s5 不同");
}
new Student("小明",17);
new Student("小红",17);
new Student("小张",17);
new Student("小王",17);
System.out.println("回收");
System.gc();
}
}
s1 s2 同类型
=======================
2992822
3017717
2992822
460141958
460141958
================
未重写前
Object01.Student@2DAAB6//2DAAB6哈希值 16进制 转化10进制为2992822
Object01.Student@2E0BF5
Student{
name='age', age=20}
Student{
name='bbb', age=22}
=====================
s4 s5 相同//重写前 不同
回收
小王对象已被删除
小张对象已被删除
小红对象已被删除
小明对象已被删除
包装类
类型转换: 基本类型在栈里 引用类型/包装类型 在堆里
parsexxx 和 valueOf
public class Bao {
public static void main(String[] args) {
//类型转换:装箱 基本类型转为引用类型
System.out.println("装箱");
int num1=10;
Integer integer1 = new Integer(num1);
Integer integer2 = Integer.valueOf(num1);
System.out.println(integer1);
System.out.println(integer2);
//类型转换:拆箱 引用类型转为基本类型
System.out.println(