Java学习:Object类

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

2
为什么重写toString()方法
默认情况下,打印的是对象的字符串表示,意义不大。
包名...类名[email protected]+该对象的哈希值的十六进制
所以,我们建议,所有子类重写该方法。
自动生成即可。
表示该对象的数据:
[类名 成员变量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);//[email protected]
43         System.out.println(s2);//[email protected]
44         /**
45          * [email protected],我们之前称他为地址值其实是不够准确的,
46          * 因为当时为了让大家好理解,我们就暂且称他为地址值。
47          * 注意:他其实说白了是一个对象的字符串表示形式--格式:包名+类名[email protected]+该对象的哈希码值
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

时间: 2025-01-12 03:44:50

Java学习:Object类的相关文章

Java学习-023-Properties 类 XML 配置文件读取及写入源代码

之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFromXML(InputStream) 和 storeToXml(OutputStream, String, String),由方法名中的 xml 不难确定这两个方法分别是读取/写入数据到 xml 文件.JDK 文档部分如下所示: 因而此文将通过源码实例演示 Properties 类是如何将数据写入

深入研究java.lang.Object类

一.概述:       Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.      可以使用类型为Object的变量指向任意类型的对象.      Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.      Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都需要知道它

Java之Object类详解

相等性的比较: 1.对于原生数据类型来说,比较的是左右两边的值是否相等 2.对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同 java.lang.Object类.java.lang包在使用的时候无需显示导入,编译时由编译器自动帮助我们导入 API(application Programming interface),应用编程接口. package com.yuanzijian01; public class ObjectTest { public stat

研究java.lang.Object类

一.概述:        Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类.       可以使用类型为Object的变量指向任意类型的对象.       Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法.       Object类的变量只能用作各种值的通用持有者.要对他们进行任何专门的操作,都

Java中Object类中的方法

Java的Object类是所有类的顶级父类,方法如下: 1. hashCode(),返回一个hash值,两个对象的hash值不同,那么两个对象equals肯定为false.hash相同,equals不一定为true. 2. equals() 3. clone() 只有实现Cloneable接口的对象才可以调用这个方法.clone()是浅复制.如果对象里面又关联其他对象那么需要重写clone()方法才能深复制.深复制是针对引用类型而言的,基本数据类型不用考虑.序列化也可以实现深复制. 4. toS

Java:Object类详解

Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的.例如,新手可能不会理解Object类.这篇文章分成三个部分讲跟Object类及其方法有关的问题. 上帝类 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of the Java Language Specification:"

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方法  定义为

java中Object类 源代码详解

http://www.cnblogs.com/langtianya/archive/2013/01/31/2886572.html, 作者:浪天涯 package java.lang; public class Object { /* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用.*/ private static native void registerNatives(); /* 对象初始化时自动调用此方法*/ static { registerNatives();

java的Object类中hashCode()和equals()方法-----转载

JAVA代码:    public static void main(String[] args)    {        Object obj1 = new Object();        Object obj2= new Object();        Object obj3 = obj2;        System.out.println("obj1==obj2 ?"+obj1.equals(obj2));        System.out.println("o

java.long.object类中的重要方法

一:概念 java.long.object Object类是所有Java类的祖先.每个类都使用 Object 作为超类. 二:方法概览 clone() 创建并返回此对象的一个副本. equals(Object obj) 指示某个其他对象是否与此对象“相等”. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.(JVM中自带的垃圾回收机制只能回收new出的对象) getClass() 返回一个对象的运行时类. hashCode() 返回该对象的哈希码值