java常用类 --- Object

Object类

  Object类是所有Java类的父类,其位于java.lang包中。任何Java对象,如果没有显示定义父类则它默认Object类作为父类。

  方法如下:

其中与线程相关的有5个方法: notify()、notifyAll()、wait()、wait(long timeout)、wait(long timeout,int nanos),  这些方法等介绍线程时在做解释。

下面来看看其他方法:

(1)equals(Object obj)方法
功能:
  Object类定义的equals方法用于判断某个指定的对象(调用equals方法的对象)与当前对象是否等价。
equals方法在非空对象引用上实现相等关系:
  自反性:对于任何非空引用值x, x.equals(x)都应返回true
  对称性:对于任何非空引用值x和y, 当且仅当y.equals(x)返回true时,x.equals(y)才返回true
  传递性:对于任何非空引用值x、y、z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true
  一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false.
  对于任何非空引用值x, x.equlas(null)都返回false
源代码:

1 public boolean equals(Object obj) {
2 return (this == obj);
3 }

equals方法与"=="运算符的关系:
  (a)equals()方法只能比较引用类型; "=="可以比较引用类型及基本类型。
  (b)默认的equals()方法比较的是内存地址,基本等同于"==",但是对类File、String、Date及包装类来说 是比较的值而不是内存地址。
  (c)"=="进行比较的时候,引用类型数据比较的是引用,及内存地址;基本数据类型比较的是值。
覆盖equals方法:
  覆盖equals方法的一般步骤如下:
  (a)用==检查是否参数就是这个对象的引用
  (b)判断要比较的对象是否为null,如果是null,则返回false
  (c)用if(getClass() != obj.getClass())判断参数的类型是否正确
  (d)把参数转换成合适的类型
  (f)比较对象属性值是不是匹配
  下面是Student类重写equals方法来比较对象是否相等,一般euqals方法可以通过eclipse工具自动生成。

 1 public class Student {
 2     private String id;
 3     private String name;
 4     private String age;
 5     private String home;
 6     @Override
 7     public boolean equals(Object obj) {
 8         if (this == obj)
 9             return true;
10         if (obj == null)
11             return false;
12         if (getClass() != obj.getClass())
13             return false;
14         Student other = (Student) obj;
15         if (age == null) {
16             if (other.age != null)
17                 return false;
18         } else if (!age.equals(other.age))
19             return false;
20         if (home == null) {
21             if (other.home != null)
22                 return false;
23         } else if (!home.equals(other.home))
24             return false;
25         if (id == null) {
26             if (other.id != null)
27                 return false;
28         } else if (!id.equals(other.id))
29             return false;
30         if (name == null) {
31             if (other.name != null)
32                 return false;
33         } else if (!name.equals(other.name))
34             return false;
35         return true;
36     }
37 }

一般来说,覆盖equals方法应该连带覆盖hashCode方法

(2)hashCode()方法
hashCode是按照一定的算法得到一个数值,是对象的散列码值。主要用在集合中实现快速查找等操作。
在java中对hashCode的规定如下:
  (a)在Java应用程序执行期间,在对同一个对象多次调用hashCode方法时,必须一致地返回相同的整数,前提是将对象进行equals比较时所用的信息没有被修改。
  (b)如果根据equals(object)方法,两个对象是相等的,那么对这两个对象中的每个对象调用hashCode方法都必须生成相同的整数结果。
  (c)如果根据equals(object)方法,两个对象不相等,那么对这两个对象中的仁一对象上调用hashCode方法不要求一定生成不同的整数结果。
  简单地说:如果两个对象equals为true,那么它们的hashCode值一定要相同;如果两个对象的hashCode相同,它们equals不一定为true.

下面是Student类重写hashCode方法,可以通过eclipse工具自动生成。

 1     @Override
 2     public int hashCode() {
 3         final int prime = 31;
 4         int result = 1;
 5         result = prime * result + ((age == null) ? 0 : age.hashCode());
 6         result = prime * result + ((home == null) ? 0 : home.hashCode());
 7         result = prime * result + ((id == null) ? 0 : id.hashCode());
 8         result = prime * result + ((name == null) ? 0 : name.hashCode());
 9         return result;
10     }

(3)toString()方法
  toString()方法是Object类中定义的另一个重要方法,其源码为:

1 public String toString() {
2   return getClass().getName() + "@" + Integer.toHexString(hashCode());
3 }

方法的返回值是String类型,用于描述当前对象的有关信息。Object类中实现的toString()方法是返回当前对象的类型和内存地址信息,但在一些子类(如String,Date)中进行了重写,也可以根据需要在用户自定义类型中重写toString()方法,以返回需要的信息。

下面是Student类重写toString方法,可以通过eclipse工具自动生成。

1     @Override
2     public String toString() {
3         return "Student [id=" + id + ", name=" + name + ", age=" + age
4                 + ", home=" + home + "]";
5     }

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间: 2024-10-27 12:36:01

java常用类 --- Object的相关文章

java的eclipse操作和常用类Object的使用

1.eclipse的快捷键: (1)alt + /   内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + alt+/ 就会自动生成相应的方法. (2)ctrl+shift+f  代码格式化 (3)ctrl+shift+o  导入包 (4)注释 ctrl+/  单行注释或者取消单行注释 ctrl+shift+/  多行注释 ctrl+shift+\  取消多行注释 (5)代码上下移动 选中代码alt+上/下

Java基础 —— Java常用类

Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@"+哈希码(一般用于覆盖). equals()方法:返回"=="操作的布尔值(一般用于覆盖). finalize()方法:用于对象的销毁(不受人为控制,由JVM调用,遵从垃圾回收机制). clone()方法:用于对象之间的拷贝(深拷贝). getClass()方法:返回对象的字节码文件对

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三

JAVA 常用类System以及Properties类的使用

package ioTest.io1; import java.util.Iterator; import java.util.Properties; import java.util.Set; /* * System: * API描述:public final class System extends Object * System 类包含一些有用的类字段和方法.它不能被实例化. * 在 System 类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问: * 加

java常用类之String类

public class StringTest{ /* * 1.字符串类: String . * 1) 什么是字符串? * 用一对双引号将一个或多个字符括起来组成的字符系列.例如: "A" "ABC" * 特殊的串: 一对连续的双引号.即: "" ,它称之为空串.也称之为长度为0的字符串. * * 2) 字符串的特性: * a) 字符串属于引用类型,一个字符串就是一个对象. * b) 字符串是不变的. * c) 字符串中每一个字符都有一个索引号(

java常用类之封装类

public class BaseTypeClassTest { /*  *   常用类  *   1.基本类型的封装类:  在Java语言中,八种基本类型均对应着一个封装类.  *   *    byte ====>>>  Byte  *    short ===>>>  Short  *    int =====>>>  Integer  *    long ====>>>  Long  *   *    float ===>

Android逆向之Java常用类

Android逆向之Java常用类 包装类 byte ­> Byte int ­> Integer short ­> Short long ­> Long float ­> Float double ­> Double boolean ­> Boolean char ­> Character   public static void test0(){        int n =123456;      // 整型转字符串         String nu

Java常用类集接口以及实现方式总结

最近学习map-reduce原理以及map-reduce编程,于是顺带着学习下Java编程,对于Java常用的数据结构和类集,我总结到mind图中,便于理清相互之间的关系 package leiji; import java.util.ArrayList; import java.util.List; import java.util.Collection; public class ArryList { public static void main(String args[]){ List

Java常用类、接口关系图谱

呕心沥血画出此图,希望在使用Java类.接口时捋顺其关系,从而更好的组织程序逻辑---请看图 Object分出来的类都是其子类 Iterable接口分出的也是子接口 从继承关系分析,其父类实现的接口子类都被继承,子类扩展的接口,有实现同一接口的被框起了, 集合类被框起来并用实线带箭头链接其来一并实现了Serializable和Clonable接口,可见一斑 图片较大建议下载后查看更清晰,后续会继续添加常用类与接口 原文地址:https://www.cnblogs.com/Open-ing/p/1