我所理解Object类

1有道面试题:object 下的方法
2 object基本api
重要细节1 equal == 的区别,如何重写equal
2 如何来筛选避免list重复
3 附上完整的student类


1有道面试题:object 下的方法

1 equals(): 和 == 作用相似
2 hashCode():用于哈希查找,重写了equals()一般都要重写该方法 ,注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值。
3 getClass(): 获取Class对象
4 wait():让当前线程进入等待状态,并释放它所持有的锁
5 notify()&notifyAll(): 唤醒一个(所有)正处于等待状态的线程
6toString():转换成字符串
7 public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串
引申:equals()和==的不同、在synchronized 同步代码块里wait()和notify()&notifyAll()如何配合、hashCode()和equals()的关系、获取Class对象还有什么方法

Student s = new Student();
System.out.println(s.hashCode());
System.out.println(s.getClass().getName());
System.out.println("--------------------");
System.out.println(s.toString());// cn.bingley.Student@42552c
System.out.println("--------------------");
// toString()方法的值等价于它
// getClass().getName() + '@' + Integer.toHexString(hashCode())
// this.getClass().getName()+'@'+Integer.toHexString(this.hashCode())
2 如何来筛选避免list重复

除了重写equal方法还要重写hashcode 方法
再结合set工具类才能有效

public static void removeDuplicateWithOrder(List list) {
        Set set = new HashSet();
        List newList = new ArrayList();
        for (Iterator iter = list.iterator(); iter.hasNext();) {
            Object element = iter.next();
            if (set.add(element))
                newList.add(element);
        }
        list.clear();
        list.addAll(newList);
    }


3 Object的equal()和==的区别?

参考回答:
equals():是Object的公有方法,具体含义取决于如何重写,比如String的equals()比较的是两个字符串的内容是否相同
“==” :对于基本数据类型来说,比较的是两个变量值是够是否相等,对于引用类型来说,比较的是两个对象的内存地址是否相同

附上完整的student类

1 name是String类型的,而String是引用类型的,所以,在这里不能直接用==比较,应该用equals()比较(用的是String类里面的equals()方法,且比较的是值内容,不是地址)
//String的equals()方法是重写自Object类的,比较的是字符串的内容是否相同
2 先判断一下,obj是不是学生的一个对象,如果是,再做向下转型,如果不是,直接返回false。
这个时候,我们要判断的是对象是否是某个类的对象?
记住一个格式:对象名 instanceof 类名
表示:判断该对象名是否是该类名一个对象

public class Student {
    private long id;
    private String name;
    private int age;
    public Student() {
        super();
    }
    public Student(String name, int age) {
        super();
        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 boolean equals(Object obj) {
        //为了提高效率
        if (this == obj) {
            return true;
        }

        if (!(obj instanceof Student)) {
            return false;
        }

        Student s = (Student) obj;

        return this.name.equals(s.name) && this.age == s.age;
    }

    @Override
    public int hashCode() {
        return getId() != null ? getId().hashCode() : 0;
    }
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值