java 對象和基本數據類型 「==」區別

「==」比較的是地址,牢記。
1。對象。integer 是對象
Integer i1 = 20;
Integer i2 = 20 ;
System.out.println(i1 == i2); // true
Integer i3 = 200;
Integer i4 = 200 ;
System.out.println(i3 == i4); // false

 

緣由:Integer i1 = 20; 實際上是一個自動裝箱的過程,編譯器會自動展開成Integer i = Integer.valueOf(20);詳情能夠看Integer.valueOf的源代碼,能夠看到參數的值在IntegerCache.low(默 認-128) 到 IntegerCache.high(默認127)範圍內時(好比20),會從IntegerCache.cache中直接取(此處參考Integer的 內部類IntegerCache的源代碼,若是不配置的話,默認是cache存儲-128到127的Integer),因此取到的都是同一個 Integer的對象,所以相同。而200不在-128到127範圍內,因此會new 一個新的Integer,故不相同。
 
2.類型。int 是基本數據類型
 
int i1=20;
int i2=20;
System.out.println(i1==i2);//true
int i3=200;
int i4=200;
System.err.println(i3==i4);//true

緣由:i1 開闢了一個內存空間,對於i2來講,jvm先在內存中尋找是否有20的地址,有就給i2賦值,也就是讓i2也指向20那塊地址。因此返回的是TRUE.java

3.jvm

String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);

 返回的是false。spa

緣由:由於str2中的llo是新申請的內存塊,而==判斷的是對象的地址而非值,因此不同。若是是String str2 = str1,那麼就是true了。對象

相關文章
相關標籤/搜索