java中对象的比较与克隆

本文详细介绍了Java中对象的两种比较方法:通过实现Comparable接口的compareTo方法按年龄排序,以及实现Comparator接口的compare方法按姓名排序。此外,还深入解析了如何通过实现Cloneable接口的clone方法进行对象克隆,包括解决引用类型变量的深拷贝问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对象比较
java中对象的比较有两种方法:
1、实现comparable中的compareTo方法:
例如下面这段代码:
将People按照年龄排序:

public int compareTo(People o) {
        if(this.age>o.getAge()){
            return 1;
        }else if(this.age==o.getAge()){
            return 0;
    }else{
            return -1;
        }
    }
     public String toString(){
    return "姓名"+name+"年龄"+age+"成绩"+score;
}      //重写toString方法

写一个测试类:

 public class Demo1{


    public static void main(String[] args) {
        People p1 = new People("zs", 20, 90);
        People p2 = new People("ls", 21, 80);
        People p3 = new People("zs", 10, 95);
        People[] p=new People[]{p1,p2,p3};
         for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j].compareTo(arr[j + 1]) > 0) {
                People temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
    }
     System.out.println(Arrays.toString(arr)); 调用重写后的toString方法,将对象按照排序后的结果输出
}
}

2.实现comparator接口中的compare方法:
例如:
将对象按照姓名排序:

      public int compare(People o1, People o2) {
        if(o1 instanceof People&&o2 instanceof People){
            People p1=(People)o1;
            People p2=(People)o2;
            if(p1.getName().compareTo(p2.getName())==0){
                return 0;
            }else if(p1.getName().compareTo(p2.getName())>0){
                return 1;
            }else{
                return -1;
            }
        }
    }
}

二、对象克隆
实现cloneable接口的clone()方法
例如如下代码:

class People implements Cloneable {
    private String name;
    private int age;
    private Student s = new Student();
    protected Object clone(){
        People p=(People) p.clone();
} 

注意:
**People类中实例变量含有引用数据类型s, 单靠 People p=(People) p.clone()拷贝下来的仅仅只是地址,s的内存并没有拷下,需要在Student类中也实现cloneable中的clone()方法,**即:

*class People implements Cloneable {
    private String name;
    private int age;
    private Student s = new Student();
    protected Object clone(){
        People p=(People) p.clone();*
        ***p.s=(Student)s.clone();***
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值