您的位置:首页 > 移动开发 > Objective-C

常用的类:Object

2020-08-03 01:28 1131 查看

文章目录

一、Object

  1. 超类、基类,所有类的直接或是间接父类,位于继承树的最顶层
  2. 如果没有写extends显示的继承某个类,都默认继承object类
  3. object类中定义的方法,是所有对象都具备的方法
  4. object类型可以存储任何对象:作为参数,可以接收任何对象;作为返回值,可以返回任何对象
  5. 类似于LINUX系统的“/”

1.getClass()

public final 类<?> getClass()

返回引用中存储的实际对象类型,通常用于判断两个引用中实际存储对象类型是否一致

public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("tansk", 18);
Student s2 = new Student("tansk", 18);
Class class1 = s1.getClass();
Class class2 = s2.getClass();
System.out.println(class1);
System.out.println(class2);

if (class1 == class2) {
System.out.println("class1和class2是同一类型");
} else {
System.out.println("class1和class2不是同一类型");
}
}
}

//结果
class learn.java基础之SE.day11常用的类.Object类.Student
class learn.java基础之SE.day11常用的类.Object类.Student
class1和class2是同一类型

Process finished with exit code 0

2.hashCode()

  1. 返回该对象的哈希码值
  2. 哈希值是:根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
  3. 一般情况下相同对象返回相同哈希码
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("tansk", 18);
Student s2 = new Student("tanmy", 19);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3=s1;
System.out.println(s3.hashCode());
}
}
//结果 得到不同的hashcode,是因为实例化s1和s2的时候开辟了两个不同的内存空间在推里面,所以通过内存地址计算出来的hashcode是不同的。而s1和s3共享内存地址,所以计算出来的hashcode是一样的。
460141958
1163157884
460141958

Process finished with exit code 0

3.toString()

  1. 返回该对象的字符串(表示形式)
  2. 可以根据程序需求覆盖该方法,如:展示对象各个属性值(重写方法)
  3. 当父类提供的方法满足不了我们的需求可以重写该方法!
//重写
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

//输出
System.out.println(s1.toString());
System.out.println(s2.toString());
//结果
Student{name='tansk', age=18}
Student{name='tanmy', age=19}

4.equals()

  1. 不能用来比较常量
  2. 比较两个对象的内容(字符串值)是否相等
//重写equals
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;

//判断age和name相同的时候,返回true
return age == student.age &&Objects.equals(name, student.name);
}

public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("tansk", 18);
Student s2 = new Student("tansk", 18);
System.out.println(s1.equals(s2));
}
}

//结果,如果不重写equals方法,s1.equals(s2)对比他们两个的地址,得到的是false
true
false

5.finalize()

注意:一般程序员是不会调用此方法的!!!

  1. 当对象被判定为垃圾时,由jvm调用此方法用来标记垃圾对象,进入回收队列
  2. 垃圾对象:没有有效引用指向此对象时,就是垃圾对象
  3. 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
  4. 自动回收机制:jvm的内存耗尽,一次性回收所有垃圾对象
  5. 手动回收机制:手动调用System.gc;通知JVM执行垃圾回收,垃圾到底回收了没有,还是jvm自己判断的,我们无权干预
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: