==和equals()都是比較相等的,那有什麼差別和聯系;
1:基本類型(primitive types), 共有8種,即int, short, long, byte, float, double, boolean, char
使用==比較基本資料類型時比較的是數值是不是相等;
例如:
1 package equals;
2
3 public class Test {
4 public static void main(String[] args) {
5 int a=3;
6 int b=4;
7 int c=3;
8 b=c;
9 System.out.println(a==c);
10 System.out.println(a==b);
11 }
12 }

因為基本資料類型是在棧中的,了解堆棧就好了解這個問題,具體參考我的另一篇部落格》》》堆棧 http://www.cnblogs.com/GH0522/p/8193650.html
那麼當比較兩個對象的時候比較的是 對象在記憶體的位置
1 package equals;
2
3 public class Test2 {
4
5 public static void main(String[] args) {
6 // TODO Auto-generated method stub
7 Double d = new Double(12.2);
8 Double d2 = new Double(12.2);
9 System.out.println(d==d2);
10
11 }
12 }
因為這兩個對象在堆中都擁有一個不同的位址雖然裡面放的數值是一樣的;
JAVA當中所有的類都是繼承于Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的記憶體位址,但在一些類庫當中這個方法被覆寫掉了,如String,Integer,Date在這些類當中equals有其自身的實作,而不再是比較類在堆記憶體中的存放位址了。例如String重寫的equals方法就是比較記憶體中存放的值。
1 package equals;
2
3 public class Test2 {
4
5 public static void main(String[] args) {
6 // TODO Auto-generated method stub
7 String a=new String("a");
8 String b=new String("a");
9 System.out.println(a==b);
10 System.out.println(a.equals(b));
11 }
12 }
看其String類中被重寫的equals
沒被重寫的Object中的equals則是實作自==
歡迎大家一起說出自己的想法。