zoukankan      html  css  js  c++  java
  • Java学习:Object类

    Object:是所有类的根类。所有的类都直接或者间接的继承自该类
    1
    创建学生对象打印学生对象的地址值(本质上是将地址通过哈希算法算出的哈希值)
    同一个对象的哈希值肯定是一样的。
    哈希值相同的对象的地址值未必一样。
    新华字典,zhu -- 456(哈希值) -- 猪(第三个),朱(第5个),珠(第9个)

    2
    为什么重写toString()方法
    默认情况下,打印的是对象的字符串表示,意义不大。
    包名...类名+@+该对象的哈希值的十六进制
    所以,我们建议,所有子类重写该方法。
    自动生成即可。
    表示该对象的数据:
    [类名 成员变量1=数据值1,成员变量2=数据值2,...]

     1 class Student{
     2     //姓名和年龄
     3     private String name;
     4     private int age;
     5     //自动生成的快捷键shift+alt+s
     6     public String getName() {
     7         return name;
     8     }
     9     public void setName(String name) {
    10         this.name = name;
    11     }
    12     public int getAge() {
    13         return age;
    14     }
    15     public void setAge(int age) {
    16         this.age = age;
    17     }
    18     public Student(String name, int age) {
    19         super();
    20         this.name = name;
    21         this.age = age;
    22     }
    23     public Student() {
    24         super();
    25     }
    26     //重写Object类中的toString方法,自动生成即可
    27 
    28     public String toString() {
    29         return "Student [name=" + name + ", age=" + age + "]";
    30     }
    31 
    32 }
    33 
    34 
    35 public class StudentDemo {
    36     public static void main(String[] args) {
    37         //创建学生对象,并打印学生对象
    38         Student s1 = new Student("林志玲", 50);
    39         Student s2 = new Student("刘德华", 55);
    40         
    41         //打印两个学生对象
    42         System.out.println(s1);//com.edu.object.Student@3cf5b814
    43         System.out.println(s2);//com.edu.object.Student@28084850
    44         /**
    45          * com.edu.object.Student@28084850,我们之前称他为地址值其实是不够准确的,
    46          * 因为当时为了让大家好理解,我们就暂且称他为地址值。
    47          * 注意:他其实说白了是一个对象的字符串表示形式--格式:包名+类名+@+该对象的哈希码值
    48          * 
    49          * 什么是哈希吗值呢?
    50          * 有一种哈希算法,可以将对象的哈希吗值算出来,同一个对象的哈希吗值是一样的,
    51          * 但是记住,哈希吗值一样不代表就是同一个对象
    52          * 
    53          * 举例:新华字典
    54          * zhu  465页(哈希吗值)          猪 (第1个)                住(第四个)                   祝(第六个)
    55          */
    56     }
    重写toString()方法

    运行结果如下:

    Student [name=林志玲, age=50]
    Student [name=刘德华, age=55]



    3
    equals():
    默认情况下,比较的是地址值。没有意义。
    所以,建议子类重写该方法。
    自动生成即可。
    这个生成的方法作用是比较对象的成员变量值是否相同。

     1 class Student2{
     2     private String name;
     3     private int age;
     4     public Student2(String name, int age) {
     5         super();
     6         this.name = name;
     7         this.age = age;
     8     }
     9     public Student2() {
    10         super();
    11         // TODO Auto-generated constructor stub
    12     }
    13     public String getName() {
    14         return name;
    15     }
    16     public void setName(String name) {
    17         this.name = name;
    18     }
    19     public int getAge() {
    20         return age;
    21     }
    22     public void setAge(int age) {
    23         this.age = age;
    24     }
    25     
    26     public int hashCode() {
    27         final int prime = 31;
    28         int result = 1;
    29         result = prime * result + age;
    30         result = prime * result + ((name == null) ? 0 : name.hashCode());
    31         return result;
    32     }
    33     
    34     //equals()方法在这里比较的是对象的成员变量值,当一个对象和另一个对象的成员变量值完全相同的时候,equals()
    35     //就可以认为这两个对象时同一个对象
    36 
    37     public boolean equals(Object obj) {
    38         if (this == obj)
    39             return true;
    40         if (obj == null)
    41             return false;
    42         if (getClass() != obj.getClass())
    43             return false;
    44         Student2 other = (Student2) obj;
    45         if (age != other.age)
    46             return false;
    47         if (name == null) {
    48             if (other.name != null)
    49                 return false;
    50         } else if (!name.equals(other.name))
    51             return false;
    52         return true;
    53     }
    54 }
    55 
    56 
    57 public class ObjectDemo {
    58     public static void main(String[] args) {
    59         //创建两个学生对象
    60         Student2 s1 = new Student2();
    61         Student2 s2 = new Student2();
    62         //equals()方法是Object类中的方法,默认比较的是对象的地址值
    63         System.out.println(s1.equals(s2));
    64         System.out.println(s1==s2);// ==完全就可以比较地址值
    65         
    66         //创建两个学生对象
    67         Student2 s3 = new Student2("刘德华", 55);
    68         Student2 s4 = new Student2("刘德华", 55);
    69         System.out.println(s3.equals(s4));
    70         
    71     }
    equals()方法演示

    运行结果如下:

    true
    false
    true

  • 相关阅读:
    算法初步-插入排序
    [数据结构]之栈
    [数据结构]之队列
    [数据结构]之链表
    [数据结构]之顺序表
    SDL一环境配置
    三大框架结构的原理及其优点
    hibernate----hibernate的基础设置
    其他
    struts----用Action的属性接收参数
  • 原文地址:https://www.cnblogs.com/shaofanglazi/p/6773553.html
Copyright © 2011-2022 走看看