-
java.lang.Object类
1.Object类是所有Java类的根父类
2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
3.Object类中的功能(属性、方法)就具有通用性。
属性:无
方法:equals() / toString() / getClass() /hashCode() / clone() / finalize() /wait() /notify()/notifyAll()
4. Object类只声明了一个空参的构造器
-
clone方法
运用场景
比如:现在有二个对象(a1和a2)如果我们要用a2保存a1对象的数据,但又不希望a2对象数据被改变时不影响到a1。这时候我们就需要用到Java的Object类提供的clone方法。
import java.util.Arrays;
public class CloneTest {
public static void main(String[] args) {
Person p = new Person(new int[]{11,22});
try {
Person p1 = (Person) p.clone();//将p clone到p1下
System.out.println("原始对象" + p);
p1.setAge(new int[]{33,44});
System.out.println("clone后的对象" + p1);
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
}
}
class Person implements Cloneable{
private int age[];
public Person(){
age = new int[2];
}
public Person(int[] age) {
this.age = age;
age = new int[2];
}
public int[] getAge() {
return age;
}
public void setAge(int[] age) {
this.age = age;
}
@Override //重写Object类中的clone方法
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" + "age=" + Arrays.toString(age) + '}';
}
}
//执行结果:
//原始对象Person{age=[11, 22]}
//clone后的对象Person{age=[33, 44]}
-
equals方法
equals()方法的使用:
1. 是一个方法,而非运算符
2. 只能适用于引用数据类型
3. Object类中equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个 引用是否指向同一个对象实体
4. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是
两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
5. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
重写的原则:比较两个对象的实体内容是否相同.
import java.util.Objects;
public class EqualsTest {
public static void main(String[] args) {
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",24);
Student s3 = new Student("李四",24);
System.out.println(s1.equals(s2));
System.out.println(s3.equals(s2));
System.out.println(s3 == s2);
}
}
//执行结果:
//false
//true
//false
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;
}
//equals方法 写法一:
@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);
}
//equals方法 写法二:
/*@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) 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;
}*/
}
== :运算符
1. 可以使用在基本数据类型变量和引用数据类型变量中
2. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
补充: == 符号使用时,必须保证符号左右两边的变量类型一致。
-
toString方法
1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
2. Object类中toString()的定义:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3. 像String、Date、File、包装类等都重写了Object类中的toString()方法。使得在调用对象的toString()时,返回"实体内容"信息
4. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
public class ToStringTest {
public static void main(String[] args) {
Student s = new Student("张三",23);
System.out.println(s);
System.out.println(s.toString());
String str = new String("字符串");
System.out.println(str);
Date d = new Date(12121212L);
System.out.println(d);
}
}
//执行结果:
//Student{name='张三', age=23}
//Student{name='张三', age=23}
//字符串
//Thu Jan 01 11:22:01 CST 1970
//class Student类参考上面equals中的Student类,重写的toString方法如下:
public String toString() {
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
-
finalize方法 可在释放对象前进行某些操作
public class FinalizeTest {
public static void main(String[] args) {
Student stu = new Student("张三",23);
stu = null;//此时对象实体就是垃圾对象,等待被回收。但时间不确定。
System.gc();//强制性释放空间
}
}
//执行结果:
//对象被释放--->Student{name='张三', age=23}
//class Student类参考上面equals中的Student类,重写的finalize方法如下:
//子类重写此方法,可在释放对象前进行某些操作
@Override
protected void finalize() throws Throwable {
System.out.println("对象被释放--->" + this);
}
本文详细介绍了Java中的Object类,它是所有Java类的父类,提供了equals()、clone()、toString()等基础方法。equals()默认比较对象的引用,但在子类中常重写用于内容比较;clone()用于复制对象,避免影响原对象;toString()返回对象的字符串表示。此外,还探讨了==运算符的作用。通过对这些方法的理解,能更好地掌握Java对象的使用。
&spm=1001.2101.3001.5002&articleId=123119149&d=1&t=3&u=99291768e4664dae80edf5c1d989331c)
911

被折叠的 条评论
为什么被折叠?



