java的Object类的学习

来源:互联网 发布:数据建模培训班 编辑:程序博客网 时间:2024/06/08 19:37

object

所有类的公共父类,一旦一个类没有显示地继承一个类则其直接父类一定是Object。

equals方法

当引用类型调用equals方法时,如果没有重写equals方法,则比较的是内存地址,如果重写了equals方法则比较的是值的大小,但是String,Date等重写了equals方法,所以比较时不需要重写equals方法,比较的是值的大小。

public class TestEquals{  public static void main (String args[]){    Cat cat1 = new Cat(1,2,3);    Cat cat2 = new Cat(1,2,3);    System.out.println(cat1 == cat2);   //false    System.out.println(cat1.equals(cat2  ));    //true         String s1 = new String("hello");    String s2 = new String("hello");    System.out.println(s1 == s2);   //false    System.out.println(s1.equals(s2));   //true       }}class Cat{  int color;  int height,weight;     Cat(int color , int height , int weight){    this.color= color;    this.height = height;    this.weight = weight;  }     public boolean equals(Object obj){    if(obj == null) return false;    else{      if( obj instanceof Cat){        Cat c = (Cat)obj;        if(c.color == this.color && c.height == this.height && c.weight == this.weight){          return true;        }      }    }    return false;  }}
equals和==的区别

对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

/** * 字符串的拼接实际上是又new出了一个新的对象 * */public class StringTest {public static void main(String[] args) {char[] c = {'a','b','c'};String string = new String(c);//创建对象System.out.println(string.hashCode());String string2 = new String(c);System.out.println(string2.hashCode());String string3 = "abc";//常量池创建System.out.println(string2.hashCode());String string4 = "abc";//访问常量池存在的对象System.out.println(string2.hashCode());System.out.println(string == string2);  //fSystem.out.println(string2 == string3); //fSystem.out.println(string3 == string4); //tSystem.out.println(string == string4);  //f}}
toString方法

toString方法可以返回一个字符串类型的关于该类的描述信息,我们通常会重写为我们需要的该对象的描述信息,比如对象各属性。
在某些情况下,虽然我们并没有显示的调用toString方法,但是程序依旧会调用toString方法
直接打印输出对象时,会调用该对象的toString()方法。//可以不写出来
打印对象的时候,实际调用的对象实际指向的类的自我描述;

public class Student {    private String name;    private int age;    private char sex;    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 char getSex() {        return sex;    }    public void setSex(char sex) {        this.sex = sex;    }    public void eat(){    }    @Override    public String toString() {        return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";    }}



0 0
原创粉丝点击