Object和Objects(java)

Object和Objects

Object

Object是Java中的顶级父类,所有的类都直接或间接的继承于Object类

Object类中的方法可以被所有子类访问

Object的构造方法

public Object()  //空参构造

在顶级父类中只有无参构造

Object的成员方法

方法名说明
public String toString()返回对象的字符串表示形式
public boolean equals(Object obj)比较两个对象是否相等
protected Object clone(int a)对象克隆
public String toString()
		Object obj= new Object();
        String str1 = obj.toString();
        System.out.println(str1);

运行结果如下

以“@”为界分为两部分

在Object文件下,toString的代码就是返回这种形式

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

如果想要改变形式的话,可以重写toString

public boolean equals(Object obj)
		Person p1=new Person();
        Person p2=new Person();
        boolean reault=p1.equals(p2);
        System.out.println(reault);

运行结果直接会报false

  • 如果没有重写equals方法,那么默认使用Object中的方法进行比较,比较的是地址值是否相等

  • 根据要求可以对equals进行重写,重写之后就可以比较属性值了

protected Object clone(int a)

对象克隆:把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制

  • 浅克隆:引用数据类型会直接克隆地址值,当两个对象中的一方进行了修改,就都会修改

  • 深克隆:引用数据类型不会直接克隆地址值,会重新创建一个,两者互不影响,字符串会复用

其中Object的克隆clone就是浅克隆,如果要将浅克隆转化为深克隆,需要重写Object方法

//以重写Object的clone方法来实现数组的深克隆为例
@Override
    protected Object clone() throws CloneNotSupportedException {
        //先把被克隆对象中的庶族获取出来
        int[] date = this.date;
        //创建新的数组
        int[] newOate = new int[date.length];
        //拷贝数组中的数据
        for (int i = 0; i < date.length; i++) {
            newOate[i] = date[i];
        }
        //调用父类中的方法克隆对象
        Person u = (Person) super.clone();
        //因为父类中的克隆方法是浅克隆,替换克隆出来对象中的数组地址值
        u.date = newOate;
        return u;
    }

Objects

Objects是一个工具类,提供一些方法去完成一些功能

Objects的成员方法

方法名说明
public static boolean equals(Object a,Object b)先做非空判断,比较两个对象
public static boolean isNull(Object obj)判断对象是否为null,为null返回true,反之返回false
public static boolean nonNull(Object obj)判断对象是否为null,跟isNull的结果相反
public static boolean equals(Object a,Object b)

下面是Objects的成员方法equals的源码

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

可以通过源码看出来,是会判断a是否为null,如果为null,直接返回false

如果a不为null,那么就利用a再次调用equals方法

此时根据a的类型,调用该类型中的equals方法

如果没有重写就睡比较地址值,如果重写了,就会根据情况进行比较

public static boolean isNull(Object obj)

实例演示

        Person p1 = null;
        Person p2 = new Person();
        System.out.println(Objects.isNull(p1));
        System.out.println(Objects.isNull(p2));

结果如下

源码展示

    public static boolean isNull(Object obj) {
        return obj == null;
    }
public static boolean nonNull(Object obj)

实例展示

        Person p1 = null;
        Person p2 = new Person();
        System.out.println(Objects.nonNull(p1));
        System.out.println(Objects.nonNull(p2));

结果如下

源码展示

    public static boolean nonNull(Object obj) {
        return obj != null;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ObjectObjects是Java中的两个不同的概念。 1. ObjectJava中所有类的基类。它是一个通用的引用类型,可以用来表示任何其他类的对象。所有的类都直接或间接地继承自Object类。Object类中定义了一些通用的方法,如equals()、hashCode()、toString()等,这些方法可以在所有的类中使用。 2. Objects是Java中的一个工具类,它提供了一些静态方法来操作对象。Objects类中的方法主要用于处理对象的比较、哈希码生成和空值处理等。其中,equals()方法用于比较两个对象是否相等,hashCode()方法用于生成对象的哈希码,toString()方法用于将对象转换为字符串表示。Objects类还提供了一些其他的方法,如requireNonNull()用于检查对象是否为空,isNull()和nonNull()用于判断对象是否为空等。 下面是一个示例代码,演示了如何使用ObjectObjects类: ```java import java.util.Objects; public class Person { private String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; return Objects.equals(this.name, other.name); } @Override public int hashCode() { return Objects.hash(name); } @Override public String toString() { return "Person [name=" + name + "]"; } } public class Main { public static void main(String[] args) { Person p1 = new Person("Alice"); Person p2 = new Person("Bob"); System.out.println(p1.equals(p2)); // 输出:false System.out.println(Objects.equals(p1, p2)); // 输出:false System.out.println(Objects.hashCode(p1)); // 输出:961 System.out.println(Objects.toString(p1)); // 输出:Person [name=Alice] } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

都不会的鲨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值