基本類型和包裝類對象使用 == 和 equals進行比較的結果?


1、值不同,使用 == 和 equals() 比較都返回 false

 

2、值相同

使用 == 比較:

  • 基本類型 - 基本類型、基本類型 - 包裝對象返回 true
  • 包裝對象 - 包裝對象返回 false
  • 緩存中取的包裝對象比較返回 true(原因是 JVM 緩存部分基本類型常用的包裝類對象,如 Integer -128 ~ 127 是被緩存的)
 Integer i1 = 100;
 Integer i2 = 100;
 Integer i3 = 200;
 Integer i4 = 200;
         
 System.out.println(i1==i2); //打印true
 System.out.println(i3==i4); //打印false

 

 

使用 equals() 比較

  • 包裝對象-基本類型返回 true
  • 包裝對象-包裝對象返回 true

 

3、不同類型的對象對比,返回 false

 

JDK1.8,實驗代碼

byte b1 = 127;
Byte b2 = new Byte("127");
Byte b3 = new Byte("127");
System.out.println("Byte 基本類型和包裝對象使用 == 比較 : " + (b1 == b2));
System.out.println("Byte 基本類型和包裝對象使用 equals 比較 : " + b2.equals(b1));
System.out.println("Byte 包裝對象和包裝對象使用 == 比較 : " + (b2 == b3));
System.out.println("Byte 包裝對象和包裝對象使用 equals 比較 : " + b2.equals(b3));
System.out.println();

short s1 = 12;
Short s2 = new Short("12");
Short s3 = new Short("12");
System.out.println("Short 基本類型和包裝對象使用 == 比較 : " + (s1 == s2));
System.out.println("Short 基本類型和包裝對象使用 equals 比較 : " + s2.equals(s1));
System.out.println("Short 包裝對象和包裝對象使用 == 比較 : " + (s2 == s3));
System.out.println("Short 包裝對象和包裝對象使用 equals 比較 : " + s2.equals(s3));
System.out.println();

char c1 = 'A';
Character c2 = new Character('A');
Character c3 = new Character('A');
System.out.println("Character 基本類型和包裝對象使用 == 比較 : " + (c1 == c2));
System.out.println("Character 基本類型和包裝對象使用 equals 比較 : " + c2.equals(c1));
System.out.println("Character 包裝對象和包裝對象使用 == 比較 : " + (c2 == c3));
System.out.println("Character 包裝對象和包裝對象使用 equals 比較 : " + c2.equals(c3));
System.out.println();

int i1 = 10000;
Integer i2 = new Integer(10000);
Integer i3 = new Integer(10000);
System.out.println("Integer 基本類型和包裝對象使用 == 比較 : " + (i1 == i2));
System.out.println("Integer 基本類型和包裝對象使用 equals 比較 : " + i2.equals(i1));
System.out.println("Integer 包裝對象和包裝對象使用 == 比較 : " + (i2 == i3));
System.out.println("Integer 包裝對象和包裝對象使用 equals 比較 : " + i2.equals(i3));
System.out.println();

long l1 = 1000000000000000L;
Long l2 = new Long("1000000000000000");
Long l3 = new Long("1000000000000000");
System.out.println("Long 基本類型和包裝對象使用 == 比較 : " + (l1 == l2));
System.out.println("Long 基本類型和包裝對象使用 equals 比較 : " + l2.equals(l1));
System.out.println("Long 包裝對象和包裝對象使用 == 比較 : " + (l2 == l3));
System.out.println("Long 包裝對象和包裝對象使用 equals 比較 : " + l2.equals(l3));
System.out.println();

float f1 = 10000.111F;
Float f2 = new Float("10000.111");
Float f3 = new Float("10000.111");
System.out.println("Float 基本類型和包裝對象使用 == 比較 : " + (f1 == f2));
System.out.println("Float 基本類型和包裝對象使用 equals 比較 : " + f2.equals(f1));
System.out.println("Float 包裝對象和包裝對象使用 == 比較 : " + (f2 == f3));
System.out.println("Float 包裝對象和包裝對象使用 equals 比較 : " + f2.equals(f3));
System.out.println();

double d1 = 10000.111;
Double d2 = new Double("10000.111");
Double d3 = new Double("10000.111");
System.out.println("Double 基本類型和包裝對象使用 == 比較 : " + (d1 == d2));
System.out.println("Double 基本類型和包裝對象使用 equals 比較 : " + d2.equals(d1));
System.out.println("Double 包裝對象和包裝對象使用 == 比較 : " + (d2 == d3));
System.out.println("Double 包裝對象和包裝對象使用 equals 比較 : " + d2.equals(d3));
System.out.println();

boolean bl1 = true;
Boolean bl2 = new Boolean("true");
Boolean bl3 = new Boolean("true");
System.out.println("Boolean 基本類型和包裝對象使用 == 比較 : " + (bl1 == bl2));
System.out.println("Boolean 基本類型和包裝對象使用 equals 比較 : " + bl2.equals(bl1));
System.out.println("Boolean 包裝對象和包裝對象使用 == 比較 : " + (bl2 == bl3));
System.out.println("Boolean 包裝對象和包裝對象使用 equals 比較 : " + bl2.equals(bl3));

 

 
運行結果

Byte 基本類型和包裝對象使用 == 比較 : true
Byte 基本類型和包裝對象使用 equals 比較 : true
Byte 包裝對象和包裝對象使用 == 比較 : false
Byte 包裝對象和包裝對象使用 equals 比較 : true
 
Short 基本類型和包裝對象使用 == 比較 : true
Short 基本類型和包裝對象使用 equals 比較 : true
Short 包裝對象和包裝對象使用 == 比較 : false
Short 包裝對象和包裝對象使用 equals 比較 : true
 
Character 基本類型和包裝對象使用 == 比較 : true
Character 基本類型和包裝對象使用 equals 比較 : true
Character 包裝對象和包裝對象使用 == 比較 : false
Character 包裝對象和包裝對象使用 equals 比較 : true
 
Integer 基本類型和包裝對象使用 == 比較 : true
Integer 基本類型和包裝對象使用 equals 比較 : true
Integer 包裝對象和包裝對象使用 == 比較 : false
Integer 包裝對象和包裝對象使用 equals 比較 : true
 
Long 基本類型和包裝對象使用 == 比較 : true
Long 基本類型和包裝對象使用 equals 比較 : true
Long 包裝對象和包裝對象使用 == 比較 : false
Long 包裝對象和包裝對象使用 equals 比較 : true
 
Float 基本類型和包裝對象使用 == 比較 : true
Float 基本類型和包裝對象使用 equals 比較 : true
Float 包裝對象和包裝對象使用 == 比較 : false
Float 包裝對象和包裝對象使用 equals 比較 : true
 
Double 基本類型和包裝對象使用 == 比較 : true
Double 基本類型和包裝對象使用 equals 比較 : true
Double 包裝對象和包裝對象使用 == 比較 : false
Double 包裝對象和包裝對象使用 equals 比較 : true
 
Boolean 基本類型和包裝對象使用 == 比較 : true
Boolean 基本類型和包裝對象使用 equals 比較 : true
Boolean 包裝對象和包裝對象使用 == 比較 : false
Boolean 包裝對象和包裝對象使用 equals 比較 : true

 

 

ps:可以延伸一個問題,基本類型與包裝對象的拆/裝箱的過程

  

來一道刷了進BAT的面試題?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM