鱼C论坛

 找回密码
 立即注册
查看: 3408|回复: 1

[学习笔记] 0基础学习Java ——Object 对象(上)

[复制链接]
发表于 2017-8-14 18:49:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 回忆一遥远 于 2017-8-16 08:43 编辑

不能放弃
我已经受够什么事都只做一半的自己了  明明智商低,水平低还做特喵的什么鬼兼职,结果辞都辞不掉

Object 对象



Java 中所有的类都直接或间接继承 Object ,因此都有如下方法

getClass();
hashCode();
equals(Object obj);
clone();
toString();
notify();
notifyAll();
wait();
finalize();



getClass();
     /**
     * @return The {@code Class} object that represents the runtime
     *         class of this object.
     */
public final native Class<?> getClass();
调用此方法会返回这个实例所对应的对象名
例如:
public class TestObject {

        public static void main(String[] args) {
                Student p = new Student(1, "小白");
                System.out.println(p.getClass());
        }
        
}

class Student{
        int id;
        String name;
        public Person(int id, String name) {
                this.id = new Integer(id);
                this.name = new String(name);
        }
}
结果是:
class Student

hashCode();
 /**
     * Returns a hash code value for the object. This method is
     * supported for the benefit of hash tables such as those provided by
     * @return  a hash code value for this object.
     * @see     java.lang.Object#equals(java.lang.Object)
     * @see     java.lang.System#identityHashCode
     */
    public native int hashCode();
计算一个实例的哈希码

即使一个类的两个实例的内部元素一样,哈希码也是不同的
例如:
public class TestObject {

        public static void main(String[] args) {
                Student p = new Student(1, "小白");
                Student p1 = new Student(1, "小白");
                System.out.println(p.hashCode());
                System.out.println(p1.hashCode());
        }
        
}

class Student{
        int id;
        String name;
        public Person(int id, String name) {
                this.id = new Integer(id);
                this.name = new String(name);
        }
}
结果:
2018699554
1311053135

equals(Object obj);
    public boolean equals(Object obj) {
        return (this == obj);
    }
由 Java src 可知,Object 的是否相等的判断方法是对比在堆中的位置是否相等,所以一般需要自己重载
例子~
public class TestObject {

        public static void main(String[] args) {
                Student p = new Student(1, "小白");
                Student p1 = new Student(1, "小白");
                System.out.println(p.equals(p1));
        }
        
}

class Student{
        int id;
        String name;
        public Person(int id, String name) {
                this.id = new Integer(id);
                this.name = new String(name);
        }

        @Override  // 这是重写的伪代码,会提示编译器检查代码的正确性
        public boolean equals(Object obj) {
                /*Student person = (Student)obj;
                if(id == person.id && name == person.name)
                        return true;
                return false;*/
                Student person = (Student)obj;
                if(id == person.id && name.equals(person.name)) return true;
                return false;
        }
}
结果
true

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-14 19:06:22 | 显示全部楼层
嗨呀,我感觉好迷茫啊..感觉人生一片灰暗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 00:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表