1樓:郝林梅
== 和 equals 的區別
1. == 是乙個運算子。
2.equals則是string物件的方法,可以.(點)出來。
我們比較無非就是這兩種 1、基本資料型別比較 2、引用物件比較
1、基本資料型別比較
==和equals都比較兩個值是否相等。相等為true 否則為false;
2、引用物件比較
==和equals都是比較棧記憶體中的位址是否相等 。相等為true 否則為false;
需注意幾點:
1、string是乙個特殊的引用型別。對於兩個字串的比較,不管是 == 和 equals 這兩者比較的都是字串是否相同;
2、當你建立兩個string物件時,記憶體中的位址是不相同的,你可以賦相同的值。
所以字串的內容相同。引用位址不一定相同,(相同內容的物件位址不一定相同),但反過來卻是肯定的;
3、基本資料型別比較(string 除外) == 和 equals 兩者都是比較值;
拓展資料:
=操作符專門用來比較變數的值是否相等。比較好理解的一點是:
int a=10;
int b=10;
則a==b將是true。
但不好理解的地方是:
string a=new string( "foo ");
string b=new string( "foo ");
則a==b將返回false。
物件變數其實是乙個引用,它們的值是指向物件所在的記憶體位址,而不是物件本身。a和b都使用了new操作符,意味著將在記憶體中產生兩個內容為 "foo "的字串,既然是「兩個」,它們自然位於不同的記憶體位址。a和b的值其實是兩個不同的記憶體位址的值,所以使用 "== "操作符,結果會是false。
誠然,a和b所指的物件,它們的內容都是 "foo ",應該是「相等」,但是==操作符並不涉及到物件內容的比較。
物件內容的比較,正是equals方法做的事。
2樓:匿名使用者
public class ckeef}
3樓:
簡單的說:==表示比較的是位址,而equals比較的是內容如:string s1 = new string ("a");
string s2 = new string ("a");
syso(s1==s2)//輸出false,因為建立了兩個string物件,存在棧中的位址不一樣
syso(s1.equals(s2))//輸出true,因為裡面的內容都是「a」
4樓:龍哥哥
誰教的你比較字串用等號啊,以後別這麼寫,要不你發生錯誤累死 你找不到 ,
以後比較字串就用equals, 學習的時候給你舉個例子,讓你明白就好,
比如說string name =new string("tom");
if(name=="tom")
你如果這麼這麼寫肯定是錯的,因為name=="tom"判斷結果是false,而你肯定以為它是ture,累死你也找不到這樣的錯誤,強烈要求你以後比較字串別用==。除非你很厲害,這種粗心造成的問題往往是致命的
5樓:匿名使用者
因為s1和s4都是從新new過的,記憶體位址不可能一樣,所以為false,可懂?
6樓:
這個確實是容易引起混亂的。。。讓人疑惑的。。。
關鍵在於。。。你要理解s1=new string("we are students");
s2="we are students";
這兩個是不一樣的。。。。new是用新建乙個物件的方法。。。。而後一種是放在常量池中的。。。你一下次再用這種方法去建立的時候。。。就會去常量池裡面找,所以
s2="we are students";
s3="we are students";
這兩個是相同的。。。指向常量池中的"we are students";。。。
而s1=new string("we are students");
s4=new string(s1);
這兩個是不同的物件。。。。。儘管他們的內容是一樣的。。。
就像有兩個人。。。他們的名字是相同的。。。。但是並不是一樣的人。。。。
希望能幫到你。。。這個需要慢慢體會。。。。我剛開始的時候也比較混亂。。。不太理解。。。
7樓:宋柯派帝
乙個是"we are students",乙個是"we are students",你是有意還是無意?
equals()和==到底有什麼區別啊?
8樓:
在基本資料型別中用的都是「==」比較的是兩個物件的內容(包括數值和資料型別)
舉個例子:int i=2; int j=2; char m='2';
system.out.println(i==j) true system.out.print(i==m) false
在引用資料型別中"=="和「equals」比較的都是兩個物件的位址值如果重寫了equals方法,比較的就是兩個物件的內容是否一致。
9樓:匿名使用者
凡是比較基本型別只能用==,比較結果你看到的字面值相等就會相等,什麼叫基本型別? byte,short,int,long,char,float,double這幾種就是基本型別.基本型別不是物件所以不存在用equals比較.
凡是比較引用型別(物件),==比較的是兩個引用是不是指向同乙個記憶體位址,equals比較的是兩個引用的字面值是不是相同,什麼叫字面值?你能看到的值就是字面值,比如:string s="abc"; abc就是字面值.
基本型別的包裝型別是物件型別,所以除非兩個相同字面值的引用指向同一記憶體位址,值才會相等,比如:
integer a=new integer(3);integer b=a;//互相賦值
這樣用等號或equals比較都會得出true,記住一點,凡是兩個引用都用了new去初始化,那==比較的結果都只會是false,互相之間有了賦值,比較結果就為true.
比較不好理解的一點:
string a="abc";
string b="abc";
a==b和a.equals(b);結果都會為true,因為沒有用new去新建物件,其實a和b都指向的是同乙個string物件"abc",改成:
string a=new string("abc");
string b=new string"abc");
後==的結果就是false了.總之參照上面的說明,不難理解.
10樓:
在比較字元型資料時,==比較的是記憶體中的位址,是物件的控制代碼
而equals()比較的是位址內的內容,比較的是物件.
11樓:匿名使用者
例子:你叫 張三 你同學也叫張三
== 相當於問 你倆是乙個人不?
equal 相當於問 你倆名字一樣不
12樓:匿名使用者
equals ;是比較兩個物件的值是否相同
==: 是比較兩個物件的hashcode是否相同
13樓:匿名使用者
只是==是個運算子,equals是個方法,其實沒什麼區別。
然後==用於基礎資料型別的時候,比較的值是否相等用於引用型別的時候,==和equals一樣都是比較位址值。
他們說的equals比較的是內容是否相等,那只是因為string類以及還有一些類重寫了equals方法所體現出來的。在object類中,equals方法內部實現就是用的==,也就是說乙個引用型別如果在沒有重寫equals方法,卻用equals進行比較的時候,用的就是object類的equals方法,比較的是位址值。
所以嚴格來說,你可以理解為某些回答講的是string的equals方法和==的區別,但是其實也不準確,因為string重寫的equals方法要求型別相同,也就是說即使兩個字串內容相等,但是乙個是string,乙個是stringbuffer,那麼用equals的結果也是false。
14樓:匿名使用者
買東西的時候選擇就可以了
equals和==的區別是什麼?
15樓:淡口味的
「==」是關係運算子,equals()是方法,同時他們的結果都返回布林值;
「==」使用情況如下:
1) 基本型別,比較的是值
2) 引用型別,比較的是位址
3) 不能比較沒有父子關係的兩個物件
equals()方法使用如下:
1) 系統類一般已經覆蓋了equals(),比較的是內容。
2) 使用者自定義類如果沒有覆蓋equals(),將呼叫父類的equals (比如是object),而object的equals的比較是位址(return (this == obj);)
3) 使用者自定義類需要覆蓋父類的equals()注意:object的==和equals比較的都是位址,作用相同
equals和==的區別
16樓:能動手別
==是乙個比較運算子,基本資料型別比較的是值,引用資料型別比較的是位址值。
(比較位址值即是指是否為同乙個物件的引用)
equals()是乙個方法,只能比較引用資料型別。重寫前比較的是位址值,重寫後比一般是比較物件的屬性。
17樓:匿名使用者
首先要了解到位址和內容的區別,在計算機記憶體管理中,是通過位址來查詢內容的。舉個例子,計算機中的位址好比現實中的家庭位址,而內容相當於家裡的某個人,當我們想要查詢某個變數的內容時,首先通過位址找到變數的儲存位置,然後再從記憶體中取出內容比較。
對於重寫了equals方法的類庫(string, integer等),== 判斷兩個物件是否指向同乙個引用,比較的是堆記憶體中的位址;而equals出了比較位址還比較「內容」是否一致。
對於只是簡單繼承object類equals方法的類庫,equals和==的作用是相同的,因為在object類中equals方法只是用==來進行判斷,如果位址相同則返回true
==可以用來比較基本型別和引用型別,而equals只能用於引用型別的比較。
j**a中==和equal有什麼區別
18樓:匿名使用者
==比較的是物件的位址,也就是是否是同乙個物件;
equal比較的是物件的值。
integer r1 = new integer(900);//定義r1整型物件
integer r2 = new integer(900);//定義r2整型物件
system.out.println(r1==r2);//返回false
system.out.println(r1.equal(r2));//返回true
誰介紹下E qual日本的,誰能詳細介紹一下日本的組合COLOR
還有 這個是verbo essere 就是 是 的意思 讀音稍微比e強一點不過聽不怎麼出來 可能剛開始不太好區分不過要是有一點基礎之後就懂了 quale 是 哪個di 是 的nel 是 在.裡in也差不多 d800e qual單反如何設定 按住qual按鈕,撥動旋轉盤選擇 格式用的,有raw,jpg...
和有啥區別, 和 的區別
青菜愛豆腐 和 主要從含義不同 執行動作的人不同和語氣不同來區別。一 含義不同 意思是 我一下,表示請對方做某事。例如 私 山田先生 日本語 教 我請山田老師教日語。意思是請允許我做.表示請對方允許自己做某事。二 執行動作的人不同 表示請對方做某事,執行動作的人是別人,是請別人做事。例如 教 你能教...
請問和的區別,日語語法。 和 的區別。
小貝貝老師 和 的區別為 指代不同 用法不同 側重點不同。一 指代不同 1 變成。例句 彼女 寛容 好 她變得寬容多了,也愛說話了。2 成為 例句 彼 說教 好 他變得更喜歡說教了。二 用法不同 1 意思是 成為,變得 狀況 開始 発展 終了 変化 表 悪 向 2 意為 成為,變成 正式用語 良 指...