1. 程式人生 > 其它 >單、雙緩衝區學習筆記

單、雙緩衝區學習筆記

==和equals的區別

  • 千古不變的:==

    • Java中,"= ="永遠在比較2個物件是否是同一個物件(指向同一塊記憶體:就是同一個物件);

    • 比較的就是記憶體地址;

 

  • 不確定的equals:

    • 討論equals,要帶上"類";

    • 其實,Java中的equal作為一個方法,我們是不能脫離了”類“而單獨討論它的;

    • 那麼,說到底,equals方法來自Object類,原始碼如下:

      //Object類中的  equals方法
      public boolean equals(){
         return this ==obj;
      }

      /**
      總結:
      1,從原始碼中我們看到了equals和==深遠的緣分;
      2,Object類中的equals方法與==功能是一模一樣的:比較2個物件是否是同一個物件;
      3,只是,作為Object子類的String類為了符合自身的特質,重寫了Object類中的equals方法;
      4,重寫後的效果是:如果2個String物件的值相同,那麼呼叫equals方法返回true,否則返回false;


      為什麼要這麼做:
      1,這是很有道理的,面向物件的思維方式其根源就是模擬現實生活的邏輯;
      2,在現實生活中,我們認為屬性完全相同的2個物件就應該是同一個物件(比如String類的值);
      3,如果不這樣,只用==就好了,為什麼還要用equals?



      */

       

    • 程式碼案例:== 和 equals


      public class Test {
         public static void main(String[] args) {

             String str1="hello";
             String str2=new String ("hello");
             String str3=new String ("hello");
             String str4=str3;
             String str5=str1;

             System.out.println(str1==str2);//false
             System.out.println(str1==str3);//false
             System.out.println(str2==str3);//false
             System.out.println(str1==str4);//false
             System.out.println(str1==str5);//true

             System.out.println("----------------");
             System.out.println(str1.equals(str2));//true
             System.out.println(str1.equals(str3));//true
             System.out.println(str2.equals(str3));//true
             System.out.println(str1.equals(str4));//true
             System.out.println(str1.equals(str5));//true
             System.out.println(str2.equals(str3));//true
             System.out.println(str3.equals(str4));//true



        }
      }