課程
/后端開發
/Java
/Java入門第二季 升級版
搞不清楚。
2015-11-06
源自:Java入門第二季 升級版 10-7
正在回答
在比較數值時,==和equals方法的作用是一樣的;比較對象時,==比較兩個對象的內存地址是否相同(即是否為同一個對象),而equals方法大部分時候會被重寫,用來比較兩個對象的內容是否相同
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,就只能用==操作符。
如果一個變量指向的數據是對象類型的,那么,這時候涉及了兩塊內存,對象本身占用一塊內存(堆內存),變量也占用一塊內存,例如Object obj = new Object(); 變量obj是一塊內存,new Object()是另一塊內存,此時,變量obj所對應的內存中存儲的數值就是對象占用的那塊內存的首地址。對于指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals方法是用于比較兩個獨立對象的內容是否相同,就好比比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:
String a = new String("foo");
String b = new String("foo");
兩條new語句創建了兩個對象,然后用a/b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,他們的首地址是不同的,即a和b中存儲的數值是不同的,所以,表達式a==b將返回false,而這兩個對象中內容是相同的,所以表達式a.equals(b)將返回true。
注意:字符串的比較基本都是使用equals方法,雖然很多地方錯寫成使用==。建議在自己定義的類中重寫equals方法,由自己決定什么情況下認為兩個對象的內容是相同的,不然該類會繼承Object類的equals方法:
boolean equals(Object o)
{
????return this == o;
}
也是比較兩個變量是否指向同一個對象,顯然,這在大多數時候并不是我們想要的。
==比較的是地址
equals 是個方法 你怎么定義的 他就比較什么 可以比較任意內容 在沒定義equals的情況下默認調用的就是== 比較的是地址
?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; ????}
上面這個是String的equals()方法.
在對String類型的對比中,equals()首先對兩個String變量進行==號運算,也就是說,首先對兩個String變量的地址進行對比,如果地址不一樣(也就是引用),就進行兩個String變量的值進行對比.
==比較的是2個對象的地址,而equals比較的是2個對象的內容,顯然,當equals為true時,==不一定為true。
自己對源碼的理解,有些回答欠妥的地方.
== 和 equals 的區別 1. == 是一個運算符。 2.equals則是string對象的方法,可以.(點)出來。 我們比較無非就是這兩種 1、基本數據類型比較 2、引用對象比較 1、基本數據類型比較 ==和equals都比較兩個值是否相等。相等為true 否則為false; 2、引用對象比較 ==和equals都是比較棧內存中的地址是否相等 。相等為true 否則為false; 需注意幾點: 1、string是一個特殊的引用類型。對于兩個字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同; 2、當你創建兩個string對象時,內存中的地址是不相同的,你可以賦相同的值。 所以字符串的內容相同。引用地址不一定相同,(相同內容的對象地址不一定相同),但反過來卻是肯定的; 3、基本數據類型比較(string 除外) == 和 equals 兩者都是比較值;
其實java第二季會講到這個問題滴~~~有視頻的,親~~~
舉報
課程升級!以終為始告別枯燥,在開發和重構中體會Java面向對象編程的奧妙
2 回答equals與==有什么區別?
3 回答== 和 equals有什么區別
5 回答equals()和==的區別
1 回答==與equals的區別?
6 回答關于equals 和==d的區別?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-07-05
在比較數值時,==和equals方法的作用是一樣的;比較對象時,==比較兩個對象的內存地址是否相同(即是否為同一個對象),而equals方法大部分時候會被重寫,用來比較兩個對象的內容是否相同
2015-11-06
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,就只能用==操作符。
如果一個變量指向的數據是對象類型的,那么,這時候涉及了兩塊內存,對象本身占用一塊內存(堆內存),變量也占用一塊內存,例如Object obj = new Object(); 變量obj是一塊內存,new Object()是另一塊內存,此時,變量obj所對應的內存中存儲的數值就是對象占用的那塊內存的首地址。對于指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals方法是用于比較兩個獨立對象的內容是否相同,就好比比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:
String a = new String("foo");
String b = new String("foo");
兩條new語句創建了兩個對象,然后用a/b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,他們的首地址是不同的,即a和b中存儲的數值是不同的,所以,表達式a==b將返回false,而這兩個對象中內容是相同的,所以表達式a.equals(b)將返回true。
注意:字符串的比較基本都是使用equals方法,雖然很多地方錯寫成使用==。建議在自己定義的類中重寫equals方法,由自己決定什么情況下認為兩個對象的內容是相同的,不然該類會繼承Object類的equals方法:
boolean equals(Object o)
{
????return this == o;
}
也是比較兩個變量是否指向同一個對象,顯然,這在大多數時候并不是我們想要的。
2015-11-06
==比較的是地址
equals 是個方法 你怎么定義的 他就比較什么 可以比較任意內容 在沒定義equals的情況下默認調用的就是== 比較的是地址
2015-11-06
上面這個是String的equals()方法.
在對String類型的對比中,equals()首先對兩個String變量進行==號運算,也就是說,首先對兩個String變量的地址進行對比,如果地址不一樣(也就是引用),就進行兩個String變量的值進行對比.
==比較的是2個對象的地址,而equals比較的是2個對象的內容,顯然,當equals為true時,==不一定為true。
自己對源碼的理解,有些回答欠妥的地方.
2015-11-06
== 和 equals 的區別
1. == 是一個運算符。
2.equals則是string對象的方法,可以.(點)出來。
我們比較無非就是這兩種 1、基本數據類型比較 2、引用對象比較
1、基本數據類型比較
==和equals都比較兩個值是否相等。相等為true 否則為false;
2、引用對象比較
==和equals都是比較棧內存中的地址是否相等 。相等為true 否則為false;
需注意幾點:
1、string是一個特殊的引用類型。對于兩個字符串的比較,不管是 == 和 Equals 這兩者比較的都是字符串是否相同;
2、當你創建兩個string對象時,內存中的地址是不相同的,你可以賦相同的值。
所以字符串的內容相同。引用地址不一定相同,(相同內容的對象地址不一定相同),但反過來卻是肯定的;
3、基本數據類型比較(string 除外) == 和 equals 兩者都是比較值;
其實java第二季會講到這個問題滴~~~有視頻的,親~~~