object类的使用

/*object类,所有的类都继承object类tostring()对象的字符串的描述hashcode()返回对象的哈希码equals()判断两个对象内容是否相等重写equals()方法,必须重写hashcode()方法clone()创建并返回此对象的副本要想一个类的对象能够克隆,必须实现两点1:实现Cloneable接口(声明式接口,没要实现的方法)2:重写object继承的clone()方法*/class people implements Cloneable
{
    private String name;
    private int age;
    public people()
    {

    }
    public people(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;
    }

    public String toString() {  //重写父类的tostring(),不然返回对象名+哈希码(十六进制)
        return "name:"+this.getName()+",age"+this.getAge();
    }
    /*
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }*/
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof people) { //是否为people
            people people=(people) obj;
            if (this.getName().equals(people.getName())&&(this.getAge()==people.getAge())) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }

    }
    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return this.getName().hashCode()+this.getAge();
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }

}
public class main {

    public static void main(String[] args) {

        people aPeople=new people("jack", 23);
        System.out.println(aPeople); //[email protected],没重写tostring()
        System.out.println(aPeople); //name:jack,age23,重写tostring()
        System.out.println("aPeople的hashCode"+aPeople.hashCode());//aPeople的hashCode1508661727
        //打印出的是十进制的哈希码,和没重写tostring()方法的十六进制值相等
        //两个对象equales,他们的hashcode一定相等
        //两个对象不相等,他们的hangcode有可能相等

        people aPeople1=new people("jack", 23);//new的话是一个新对象
        System.out.println("aPeople1的hashCode"+aPeople1.hashCode());//aPeople1的hashCode1343958201

        System.out.println(aPeople==aPeople1);//地址不相同,返回false
        System.out.println(aPeople.equals(aPeople1));//返回false ?
        //说明:equals比较两者的内容是否相等,看上去两者内容相等,当没有重写它的equals方法时候,
        //默认比较的是他们的hashcode,对于上面2个对象,hashcode肯定不同,故返回false
        System.out.println(aPeople.equals(aPeople1));//重写equals后return true

        String a=new String("jack");
        String b=new String("jack");
        System.out.println(a==b); //return false;
        System.out.println(a.equals(b)); //return true;  ?
        System.out.println(a.hashCode()==b.hashCode()); //return true; ?
        //这边为什么又是true呢?因为String类(特殊的类)重写了hachcode和equals方法
        System.out.println(System.identityHashCode(a));
        System.out.println(System.identityHashCode(b)); //重写前的hashcode值是不同的

        //people p3=aPeople1; //这样clone的话p3改变的话对apeople1也有影响
        try {
            people p4=(people) aPeople1.clone();
            p4.setName("xiaoming");
            System.out.println(p4);  //这样的话是copy的副本,输出结果不一样
            System.out.println(aPeople1); //clone,改变p4对apeople1没影响
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
时间: 2024-12-20 00:35:05

object类的使用的相关文章

Object类

Object类是所有类,数组,枚举类的父类,也就是说,java允许把任何类型的对象赋值给Object类型的 变量,当定义一个类是没有石油extends关键字为他显示指定父类时,则该类默认继承Object父类 因为所有的类都是Object类的子类,所有任何java对象都可以调用Object类的方法,Object类提供了如下的 几个常用的方法 1.boolean equals(Object obj): 判断指定对象与该对象是否相等,此处相等的标准是,两个对象是同一个对象 2.protected vo

Java类的设计----Object 类

Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: public class Person extends Object {. ... }例: method(Object obj){-}//可以接收任何类作为其参数 Object o=new Person; method(o); ==操作符与equals方法 ==操作符与equals方法的区别: =

Javascript中的Object类

Object类是Javascript中最基本的类,用来创建普通对象,通常用这些对象存储数据. 1.Object对象 1.1.创建Object对象 创建Object对象有两种方式 第一种创建方式:new Object() var obj = new Object(); 第二种创建方式:{} var obj = {}; var obj2 = {"name":"tom","age":24}; 1.2.添加属性 obj.firstname = "

【宋红康学习日记11】Object类与equals方法

1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在String,File,Date类重写了equals方法,比较的是值: 3 String类内存解析 Person p1=new Person("花花",20); Person p2=new Person("曹操",40); syso(p1==p2);//false syso

java之Object类介绍

1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 public class Person extends Object{ ~~~~~ } 2.Object类之equals方法 ①.Object类中定义有: public boolean equals(Object obj)方法. 提供定义对象是否相等的逻辑. ②.Objec的equals方法  定义为

包装类、Object类——Java笔记(八)

包装类: 基本数据类型的包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 基本数据类型包装类除了Character类之外,其他7个都有两个构造方法 一个构造方法传参传的是基本数据类型本身 另一个构造方法传参传的是String类型的,而Character少的就是这一个,即public Character(String

黑马程序员-面向对象-Object类

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一.Object类中的equals(

Object类-try-catch-finally-throw-throws-自定义异常

一.Object类     Object类是最顶端的类,其它类都是它的子类,它的方法可以被继承.如果定义的类没有继承别的类,那它的直接父类就是Object.如果方法参数类型为object类型, 则调用方法可以传递任意类型的值(相当于多态);同理,如果方法返回值为Object类型,那么给方法的返回数据值为任意类型.     两种常用方法:toString()/equals() (1)toString方法 源码: public String toString(){         return ge

static,final关键字,Object类的tostring方法,equals方法,hashCode方法

1)static关键字 static可以修饰:属性.方法.代码块 静态方法不能访问非静态 属性 或 方法 属性(变量): 成员变量: 静态变量: 通过 类名.静态变量来访问 通过 对象名.静态变量来访问(是有警告的) 存在于方法区中,有且仅有一份 非静态变量 局部变量 代码块 代码块的执行顺序 1.静态代码块:哪个静态代码块放在前边,就先执行谁 2.普通代码块:哪个普通代码块放在前边,就先执行谁 3.构造方法 如果有两个类,一个类是Father,另一个类是Child , Child 继承了 Fa

Java深入研究【1、object类】

一.概述Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 参考英文:* Class {@code Object} is the root of the class hierarchy.* Every class has {@code Object} as a superclass. All objects,* including arrays, implement the methods of this class. 英文释义: