黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 java中object類的常用方法有哪些?

java中object類的常用方法有哪些?

更新時間:2019-09-16 11:27:48 來源:動力節點 瀏覽2664次

  

今天動力節點java培訓機構小編為大家介紹“java中object類的常用方法”,希望通過此文大家能夠知道object類的常用方法,下面就隨小編一起看看java中object類的常用方法有哪些?


u=4195299513,2392537383&fm=11&gp=0.jpg


一、clone


  1、clone()方法


  在實際編程過程中,常常遇到這種情況:有一個對象A,在某一時刻A中已經包含了一些有效值,此時可能會需要一個和A完全相同新對象B,并且此后對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨立的對象,但B的初始值是由A對象確定的。在Java語言中,用簡單的賦值語句是不能滿足這種需求的。實現clone()方法是滿足需求最簡單,也是最高效的手段。


  clone()將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 new操作符返回的新對象的區別就是這個拷貝已經包含了一些原來對象的信息,而不是對象的初始信息。


  2、例子


public class Test implements Cloneable{

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


    public Object clone() {

        Test copy = null;

        try {

            copy = (Test) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        Test dh = new Test(100.00);

        Test dhClone = (Test) dh.clone();


        System.out.println("Original:" + dh.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.getValue()); //Clone :100.0


        dh.setValue(200.00);

        dhClone.setValue(400.00);


        System.out.println("Original:" + dh.getValue()); //Original:200.0

        System.out.println("Clone :" + dhClone.getValue()); //Clone :400.0

    }

}

  

3、Shallow Cloning


public class Test {

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


public class ShallowClone implements Cloneable {

    public Test holder = new Test(0.0);

    public Object clone() {

        ShallowClone copy = null;

        try {

            copy = (ShallowClone) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        ShallowClone  dh = new ShallowClone();

        dh.holder.setValue(100.00);

        ShallowClone  dhClone = (ShallowClone ) dh.clone();


        System.out.println("Original:" + dh.holder.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0


        dh.holder.setValue(200.00);


        System.out.println("Original:" + dh.holder.getValue()); //Original:200.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :200.0

    }

}


  此例子中當ShallowClone類使用super.clone()調用Object類的clone()方法時,它會接收自身的淺拷貝。也就是說,它與其克隆共享其實例變量中使用的holder對象。


  4、Deep Cloning


  在深層克隆中,需要克隆對象的所有引用實例變量引用的所有對象。

 

public class Test implements Cloneable{

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


    public Object clone() {

        Test copy = null;

        try {

            copy = (Test) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class DeepClone implements Cloneable {

    public Test holder = new Test(0.0);

    public Object clone() {

        DeepClone copy = null;

        try {

            copy = (DeepClone) super.clone();

            copy.holder = (Test) this.holder.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        DeepClone dh = new DeepClone();

        dh.holder.setValue(100.00);

        DeepClone dhClone = (DeepClone) dh.clone();


        System.out.println("Original:" + dh.holder.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0


        dh.holder.setValue(200.00);


        System.out.println("Original:" + dh.holder.getValue());  //Original:200.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0

    }

}



  二、equals


  1、概述


  equals 方法默認比較的是兩個對象的引用是否指向同一個內存地址。hashCode 是一個 native 本地方法,默認的 hashCode 方法返回的就是對象對應的內存地址。


  equals 方法是基類 Object 的方法,創建的所有的對象都擁有這個方法,并有權利去重寫這個方法。該方法返回一個 boolean 值,代表比較的兩個對象是否相同,這里的相同的條件由重寫 equals 方法的類來解決。

  

String str1 = "abc";

String str2 = "abc";

str1.equals(str2);//true


  String 類重寫了 equals 方法,否則兩個 String 對象內存地址肯定不同。


  2、equals()方法的實現的規范


  假設x,y和z是三個對象的非空引用。


  自反性。表達式x.equals(x)應該返回true。


  對稱性。如果x.equals(y)返回true,y.equals(x)必須返回true。


  傳遞性。如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)必須返回true。


  一致性。如果用于equals比較的對象信息沒有被修改的話,多次調用時 x.equals(y) 要么一致地返回 true 要么一致地返回 false。


  與空引用的比較:任何類的對象不應等于空引用。表達式x.equals(null)應始終返回false。


  3、equals 與 == 的區別


  (1)若 == 兩側都是基本數據類型,則判斷的是左右兩邊操作數據的值是否相等


  (2)若 == 兩側都是引用數據類型,則判斷的是左右兩邊操作數的內存地址是否相同。若此時返回 true , 則該操作符作用的一定是同一個對象。


  (3)Object 基類的 equals 默認比較兩個對象的內存地址,在構建的對象沒有重寫 equals 方法的時候,與 == 操作符比較的結果相同。


  (4)equals 用于比較引用數據類型是否相等。在滿足equals 判斷規則的前體系,兩個對象只要規定的屬性相同我們就認為兩個對象是相同的。


public class Test {

    public String name="abc";

    public static void main(String[] args) {

        Test test=new Test();

        Test testb=new Test();

        String a=new String("a");

        String b=new String("a");

        System.out.println(test.equals(testb));//false

        System.out.println(test==testb);//false

        System.out.println(test.name.equals(testb.name));//true

        System.out.println(a==b);//false

        System.out.println(a.equals(b));//true

    }   

}


  4、equals()和hashCode()的聯系


  調用 equals 返回 true 的兩個對象必須具有相等的哈希碼。


  如果兩個對象的 hashCode 返回值相同,調用它們 equals 方法不一返回 true 。



  三、getClass


  Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。


  一般情況下,getclass()方法和class方法是等價的,都可以獲得一個類型名,例:


class A{

    public void func(){


    }

}


public class Test {

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.getClass()+" "+A.class); //class A class A

    }

}


  getclass()和class的區別


  getClass() 是一個類的實例所具備的方法,而class() 方法是一個類的方法。


  getClass() 是在運行時才確定的,而class() 方法是在編譯時就確定了。



  四、toString


  toString()是Object類的一個公有方法,而所有類都繼承自Object類。所以所有類即使不實現toString方法,也會存在從Object類繼承來的toString。Object類提供了toString()方法的默認實現。它返回一個以下格式的字符串:


  <fully qualified class name>@<hash code of object in hexadecimal>


例子:

import java.util.ArrayList;


public class ObjectDemo {

   public static void main(String[] args) {


      Integer i = new Integer(50);


      ArrayList list = new ArrayList();


      list.add(50);

      list.add("Hello World");


      System.out.println("" + i.toString());  //50

      System.out.println("" + list.toString()); //[50, Hello World]

   }

}


  類可以實現toString方法,在控制臺中打印一個對象會自動調用對象類的toString方法,所以我們可以實現自己的toString方法在控制臺中顯示關于類的有用信息。

 

public class Main{

  public static void main(String[] argv){

    MyClass obj  = new MyClass(123);

    String objStr = obj.toString();

    System.out.println(objStr);

  }

}

class MyClass {

  private int value;


  public MyClass(int value) {

    this.value = value;

  }


  public void setValue(int value) {

    this.value = value;

  }


  public int getValue() {

    return value;

  }


  public String toString() {

    String str = String.valueOf(this.value);

    return str;

  }

}


以上就是動力節點java培訓機構小編介紹的“java中object類的常用方法有哪些?”的內容,希望對大家有幫助,更多java最新資訊請繼續關注動力節點java培訓機構官網,每天會有精彩內容分享與你。


相關免費視頻教程推薦


java入門學習零基礎教程下載——Object類簡介:http://m.ilovecolors.com.cn/xiazai/2586.html


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产人伦视频在线观看 | 国产伦精品一区三区视频 | 波多野结衣视频在线观看 | 国产成人精品久久 | 肉动漫成人免费无遮羞 | 国产成人在线观看免费网站 | 在线看毛片网站 | 手机在线免费观看毛片 | 免费一级毛片女人图片 | free中国性 | 有色hd| 欧美午夜大片 | 看黄a大片 免费 | 美女福利影院 | 日本肥老妇色xxxxx日本老妇 | 天天射天天爱天天干 | 国产一区二区三区高清视频 | 性欧美极品 | 午夜在线播放免费人成无 | 久爱视频www在线播放 | 欧美日韩国产伦理 | 国产成人精品三级91在线影院 | 亚洲精品视频在线 | 日韩欧美亚洲综合 | 日韩在线第三页 | 亚洲成人动漫在线 | 欧美亚洲天堂网 | 在线国产一区二区三区 | 国产成人精品一区二区视频 | 天天摸天天澡天天碰天天弄 | 黄色a级片在线观看 | 2020久久精品亚洲热综合一本 | 日日做日日摸夜夜爽 | 色人视频 | 黄网页在线观看 | 日本一区二区三区免费高清在线 | 成人免费视频在线 | 草色在线 | 国产成人在线小视频 | 亚洲欧洲第一页 | 一个人看的视频www在线 |