1,來,先來一道考題,你看做對了嗎?
integer i1 = new integer(12);
integer i2 = new integer(12);
system.out.println(i1 == i2);
integer i3 = 126;
integer i4 = 126;
int i5 = 126;
system.out.println(i3 == i4);
system.out.println(i3 == i5);
integer i6 = 128;
integer i7 = 128;
int i8 = 128;
system.out.println(i6 == i7);
system.out.println(i6 == i8);
以上這些輸出的答案是什麼?true or false? why?
你可以自己先思考,再看後面的答案分析。
答案揭曉
分情況來比較:f t t(自動拆箱,數值) f t(自動拆箱,數值)
new:一旦new,就是開闢一塊新記憶體,結果肯定是false不new:看範圍
integer做了快取,-128至127,當你取值在這個範圍的時候,會採用快取的物件,所以會相等
當不在這個範圍,內部建立新的物件,此時不相等
實際比較的是數值,integer會做拆箱的動作,來跟基本資料型別做比較原始碼分析:此時跟是否在快取範圍內或是否new都沒關係
當我們寫integer i = 126,實際上做了自動裝箱:integer i = integer.valueof(126);分析這段原始碼
public static integer valueof(int i)
//integercache是integer的內部類
private static class integercache {
static final int low = -128;
static final int high;
static final integer cache;
static {
// high value may be configured by property
int h = 127;
Integer 和int的區別
1.int是基本的資料型別,直接存數值 2.integer是int的封裝類 integer 是物件,用乙個引用指向這個物件 integer 是乙個類,是int的擴充套件,定義了很多的轉換方法。3.int和integer都可以表示某乙個數值 4.int和integer不能夠互用,因為他們兩種不同的資料...
int和Integer的區別
今天有個學弟問了我乙個面試題 integer a 128 integer b 128 system.out.println a b 輸出什麼?為什麼?說來慚愧,我的直覺告訴我會輸出flase,但突然間還想不出來為什麼。所以寫了個例子研究了下 public static void main strin...
Integer和int的比較
package com.mawei.www public class integertest 和 equals的差異 private static void mytest01 確認有效範圍 private static void mytest02 混合比較 private static void m...