第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java在比較字符串的時候,equals 與== 完全一樣呀?

Java在比較字符串的時候,equals 與== 完全一樣呀?

藍山帝景 2019-03-21 18:14:56
完全一樣,比較字符串equals與== 完全沒有區(qū)別嗎?
查看完整描述

7 回答

?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

        String a1="a";

        String a2="a";

        String b1=new String("b");

        String b2=new String("b");

        System.out.println(a1 == a2);

        System.out.println(a1.equals(a2));

        System.out.println(b1 == b2);

        System.out.println(b1.equals(b2));

結(jié)果:


true

true

false

true

==比較的是變量指向?qū)ο笫欠褚恢?,之所以s與s2相等是因為jvm進行優(yōu)化,兩個變量指向一個對象。

equal比較的是對象中保存的字符串是否相同。


查看完整回答
反對 回復 2019-04-17
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

== 運算符測試兩個引用是否指向同一個對象。如果要測試兩個不同的對象是否相等,必須使用 equals() 方法。

如果有興趣了解更多,可以看一下我寫的一篇文章。Java快速掃盲指南


查看完整回答
反對 回復 2019-04-17
?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

感覺你提問很有問題,你是如何從貼出的代碼中得到文字描述的結(jié)論的?
我這里大概猜測一下你的意圖,勉強回答一下。
在java中,==和equal方法是不同的,簡要描述如下:

  1. ==

    ==用于判斷兩個引用是否指向相同的對象,如 
    Object a = new Object();
    Object b = a;
    a == b; // ==> true

  2. equal

    equal方法用于判斷兩個對象是否相等。這個方法在頂級類Object中就已經(jīng)定義了,在Object中該方法的實現(xiàn)就是用的==來比較引用是否相等。任何子類如果想使用equal方法,最好覆寫Object的equal方法,提供自己的相等邏輯。如下定義一個Person類。

public class Person {

    private String name;

    private int age;

    // ...

    @Override

    public boolean equal(Object o) {

        if(o instanceof Person) {

            return o.getName().equal(name) && o.getAge() == age;

        } else {

            return false;

        }

    }

}


查看完整回答
反對 回復 2019-04-17
?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

s 和 s2 都是直接引用的常量 "12",編譯器會優(yōu)化代碼,只創(chuàng)建一個 "12" String 對象,由兩個變量來引用,所以 s == s2。但是如果你的另一個 "12" 是由其它方式創(chuàng)建的,比如 new String("12"),或者 "1234".substring(0, 2),你就會發(fā)現(xiàn) == 不好使了,而 equals 是對內(nèi)容進行比較???equals 的原碼你會發(fā)現(xiàn)它也是先使用 == 比較引用的


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;

}


查看完整回答
反對 回復 2019-04-17
?
ITMISS

TA貢獻1871條經(jīng)驗 獲得超8個贊

首先要考慮equals跟==的作用:

==相當于是比較兩個對象的引用,而equals方法是Object類中定義的,String類對其進行了重寫,源代碼可以看樓上的分析,首先也使用==比較了引用,之后比較內(nèi)容。

我們在比較兩個字符串時,大多是想比較內(nèi)容,所以使用equals方法。如果你使用==,IDE其實是會拋一個警告的。


那么為什么你這里的==與equals方法效果一樣呢,就要看使用“=”創(chuàng)建字符串對象與使用new創(chuàng)建字符串的區(qū)別。

不知道有沒有去了解過字符串池,我的理解也不深,需要的話可以自己看看。

第一次使用“=”創(chuàng)建字符串對象時,會查看字符串池中有沒有“12”,如果沒有,那么就添加一個到池中,然后把引用返回給s;之后再創(chuàng)建s2時,發(fā)現(xiàn)池中有,那么直接將這個引用賦給s2,所以s和s2的引用是相同的,造成==比較為true。

可以用new的方式創(chuàng)建字符串,然后看看效果:


        String s1 = "12";

        String s2 = "12";

        String s3 = new String("12");


        System.out.println(s1 == s2);//true

        System.out.println(s1.equals(s2));//true

        System.out.println(s1 == s3);//false

        System.out.println(s1.equals(s3));//true

使用new關(guān)鍵字創(chuàng)建字符串對象時,每次都會新創(chuàng)建一個對象,然后把引用賦給變量。


查看完整回答
反對 回復 2019-04-17
  • 7 回答
  • 0 關(guān)注
  • 797 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號