==和equals的區別案例+解析


什么理論也先不說,代碼先給大家看下:

  

接下來:用一句話總結==和equals的區別

  ==號比較的是內存地址  ||  equals()比較的是字符串的內容

解析:

  A  ==操作符專門用來比較兩個變量的值是否相同,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等
       只能用==操作符。

  B  equals方法用來比較兩個獨立對象的內容是否相同,兩條new語句創建了兩個對象,然后用s3,s4兩個變量分別指向其中的一個對象,這是兩個不同的對象,它們的

  首地址是不同的,就是說s3,s4中存儲的數值是不同的,所以表達式s3==s4將返回false,而兩個對象中的內容是相同的,所以s3.equals(4)返回了true。

  【字符串的比較基本上都是使用equals方法。
          如果一個類沒有自己定義的equals方法,那么ta將繼承Object類的equals方法,Object類的的實現代碼如下:
        boolean equals(Object o)
        {
            return this==o;
        }

    這說明如果一個類沒有自己定義的equals方法,ta默認的equals方法,等同於使用==操作符,也就是比較兩個變量指向的對象是同一個對象。這時候使用equals和==
    會得到相同的結果!!s1==s2和s1.equals(s2)都是true。如果希望寫的類能夠比較兩個實例對象的內容是否相同,則需要覆蓋equals方法!!

    】

 最后總結:

  1.對於基本數據類型,只有==,沒有equals()(注意String類型不是基本數據類型),所以很明顯值相等就為true。
  2.對於字符串,==指比較兩者的內存地址,equals()則重寫了Object類的equals(),比較的是內容,你可以查看API看看它怎么重寫的。對於字符串是存放在方法區的字符串常量池里的,無論定義多少,只要字符串值相等都指同一塊內存地址,所以==和equals()結果沒區別。
  3.對於實例對象而言,==比較的依然是內存地址(所以你可以看出無論什么情況,==一直比較的都是內存地址),而equals()默認重寫Object類的equals()方法(比較地址)。但是一般我們會自己重寫equals(),讓它比較值是否相等。
  4.建議:學完“內存地址”和“重寫”的內容,再回過頭來看這一知識點。

附加總結:

而java的8大基本數據類型分別是:
  數據類型   大小 范圍 默認值
  byte(字節)   8 -128 - 127 0
  shot(短整型)  16 -32768 - 32768 0
  int(整型)   32 -2147483648-2147483648 0
  long(長整型) 64 -9233372036854477808-9233372036854477808 0
  float(浮點型) 32 -3.40292347E+38-3.40292347E+38 0.0f
  double(雙精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
  char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
  boolean(布爾型) 1 true/false false

分類為:
  邏輯類 boolean
  文本類 char
  整數類 byte, short, int, long
  浮點類 double, float。

String是最基本的數據類型嗎?
  String類並不是基本數據類,而是一個類(class),是C++、java等編程語言中的字符串。String類是不可變的,對String類的任何改變,都是返回一個新的String類對象。     String 對象是 System.Char 對象的有序集合,用於表示字符串。String 對象的值是該有序集合的內容,並且該值是不可變的。
好了,這個知識點就總結到這里吧,小編在走之前,把上面的代碼給大家粘貼過來吧,這省了部分人不少時間...哈哈

public static void main(String[] args) {
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");
        String s4 = new String("Java");
        //1、==兩個字符串@新建對象之前比較
        System.out.println("s1==s2:"+(s1==s2));
        //2、==字符串與新建對象比較
        System.out.println("s1==s3:"+(s1==s3));
        //3、==兩個字符串@新建對象之后比較
        System.out.println("s3==s4:"+(s3==s4));
        //1、equals兩個字符串@新建對象之前比較
        System.out.println("s1.equals(s2):"+(s1.equals(s2)));
        //2、equals字符串與新建對象比較
        System.out.println("s1.equals(s3):"+(s1.equals(s3)));
        //3、equals兩個字符串@新建對象之后比較
        System.out.println("s3.equals(s4)"+(s3.equals(s4)));
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM