Java中Object类的公有方法

  HashCode();wait();notify();equals();getClass();toString();clone();finalize();

  这里只是简单介绍一下其中的几个函数:

  HashCode():

     * As much as is reasonably practical, the hashCode method defined by
     * class {@code Object} does return distinct integers for distinct
     * objects. (This is typically implemented by converting the internal
     * address of the object into an integer, but this implementation
     * technique is not required by the
     * Java™ programming language.)

  这个是Java官方文档里的部分解释,简单地说就是返回一个integer类型的值,这个值是通过该Object的内部地址(internal address)转换过来的,这个哈希码是可以通过getClass()方法看到具体值的,显示的是十六进制的数,有时候可以通过此方法来判断对象的引用是否相等,研究java内存的时候,这个可能会有用。

  equals():

  都知道java中比较字符串是否相等应该用equals();而==则是比较的值,也就是引用;那么为什么是这样的呢?我今天看了下equals的实现方法,发现字符串的比较,是通过每一个字符进行比较,如果都相等,则返回true;而源码里面Object类型的equals方法却是直接用==来代替的,也就是说相当于直接比较引用了,这也就是为什么我们有时候要重写equals方法了,下面附上Jdk中String类型的equals方法源码。

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

  getClass():

  toString():

  下面的例子中j是一个简单的Java对象,后面分别是toString()方法和getClass()方法的输出,@后面的即为哈希码,也就是内存地址,getClass()返回运行时的类,

还有getName(),getSimpleName()方法,这些都可以通过查看源码的方法来了解用法,看源码真的是很好的一种学习方法。

System.out.println(j.toString());
System.out.println(j.getClass());
[email protected]
class com.wust.cvte.j2se

  clone():

  中文”克隆"的意思,刚开始我看源码里的注释,看的并不是很懂,后来又在网上查看一些博客,明白了clone方法实际上是实现了浅复制,附上一篇详解此方法的博客,有图有真相,特别详细,http://blog.csdn.net/zhangjg_blog/article/details/18369201#0-qzone-1-28144-d020d2d2a4e8d1a374a433f596ad1440

  其它方法涉及到线程和内存回收,GG等,到用的时候再做记录吧,其中若有不正确之处,欢迎指证。

  

  

时间: 2024-08-03 12:54:31

Java中Object类的公有方法的相关文章

JAVA中Runtime类以及exec()方法,Process的使用

package ioTest.io1; /* * Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. * 这也是jvm实现跨平台的一个重要原因. * 可以通过 getRuntime 方法获取当前运行时. * API分析: * public class Runtime extends Object * 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. * 可以通过 getRuntime 方法获

Java中Object类中的方法

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

JAVA中Object类中的equals方法补充

Object类中的equals方法: 无论new多少个对象,当使用 "= =" 来判断的时候,是判断内存地址.判断回事false 若是需要进行对象之间的判断,则需要重写equals方法: public boolean equals(Object obj)//obj是传入的形式参数(对象) { if (obj == null)//判断对象是否为空 { return false;//空则返回false } else { if ( obj instanceof cat)//判断这个传入参数(

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类是怎么回事,干嘛使的?举例说明!

1.Object Class Object类的作用:m a r k - t o-        w i n:(视频下载) (全部书籍) 在java中,因为所有的类都有共性,所以java的缔造者们把java设计成这样:所有的类都是Object类的直接或间接子类,而且把上述所有类的共性都放在Object类中.这样就可以达到代码重用.All classes in java are subclasses of Object class. Object类的equals和toString的用法: 下面一组两

关于Java中String类的hashCode方法

首先来看一下String中hashCode方法的实现源码 1 public int hashCode() { 2 int h = hash; 3 if (h == 0 && value.length > 0) { 4 char val[] = value; 5 6 for (int i = 0; i < value.length; i++) { 7 h = 31 * h + val[i]; 8 } 9 hash = h; 10 } 11 return h; 12 } 在Stri

Java:Object类的equals()方法 如何编写一个完美的equals()方法

一  代码实例: package freewill.objectequals;  /** * @author freewill * @see Core Java page161 * @desc getClass实现方式,另有instance of实现方式,根据不同场景使用. */  public class Employee {      private String name;      private int salary;      private String hireDay;     

浅谈JAVA中“增强”类的某个方法的几个中方法!

一.继承 使用场景:能够控制这个类的构造的时候,才可以使用继承. 优点:简单容易使用, 缺点:耦合性大大的增强,不利于后期的维护,所以对于继承这种方法,谨慎使用. 代码实现: 二.装饰者模式 使用场景:1.包装对象和被包装对象实现相同的接口 2.包装的对象中需要获得到被包装对象的引用. 缺点:如果接口的方法比较多,增强其中某个方法,其他的功能的方法需要原有的调用: 代码实现:    /**      * 装饰者模式:     *           增强request的getParameter方

JAVA中String类的intern()方法的作用

一般我们平时很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: [java] view plaincopyprint? public static void main(String[] args) throws Exception { String a =  "b" ; String b =  "b" ; System.out.print( a == b); String c = "d" ;