面接-intとIntegerの違いについて話します
3268 ワード
最近多くの候補者を面接して、多くの人が基礎をあまり重視していないことを発見して、甚だしきに至っては仕事の十数年、プロジェクトの経験の十数ページのベテランプログラマーさえ、枠組みはたくさん勉強しましたが、多くのJava関連の基礎知識は多くて答えられません.まだ多くの人が答えて、使うことしか知らないが、具体的にどのように実現したのかを見たことがない.
合格したプログラマーとして、基本的な仕事がしっかりしていないと、あなたのプログラムに診断しにくい奇妙な問題がたくさん現れることを知っています.例えば過大なオーバーヘッド(頻繁なGCによるプログラムカートンの発生やOOMの発生)、Integerキャッシュメカニズムによる奇妙なフィールド(詳しくは後述)なので、面接に関する一連の文章を書いて、ありふれた穴をあけやすい面接問題をまとめたいと思います.今日は面接官の立場に立って、面接の基礎問題についてお話ししたいと思います.そして、面接官が満足できる回答をできるように指導したいと思います
基本回答
intは8つの基本データ型(boolean,byte,short,char,int,float,double,long)の1つである整形型であり、大きさは4バイトを占有し、値範囲は正負2の32(4*8)次べき乗であり、Javaはすべて対象と称されるが、基本データ型は例外である
Integrはintの包装類で、JDK 1.5に導入され、文字列変換、数学演算、汎用型、自動梱包などの実用機能を提供し、関連するプログラミングの難易度を極めて簡略化した.
Interの値キャッシュ範囲について
次に典型的な例を示します.多くの人が踏んだ穴でもあります.プログラムは以下の通りです(機械で実際に操作することをお勧めします).
パッケージクラスキャッシュメカニズムの原因
なぜこのような奇妙な状況が発生したのか考えてみましょう.次にIntegerを見てみましょう.valueOfのソースコード
ソースコード内に秘密はないが、JDKによるInteger構造の改善によるキャッシュメカニズムの導入によるものであることがわかる.従来のInteger構造の方式は直接コンストラクタnewの1つのオブジェクトを呼び出すことであるが、考察と調査の結果、多くの人がIntegerを使用するのは小さい範囲に集中していることが分かったため、JDKはIntegerである.valueOfは、構造オブジェクトのパフォーマンスオーバーヘッドを改善するためのキャッシュメカニズムを強化しています(そう、自動梱包逆コンパイル後もvalueOf()メソッドを呼び出して構造オブジェクトを実現します)Java公式ドキュメントは、Integerキャッシュ範囲が-128~127であることを示しています.
この中には細部がたくさんあるので、私たちは一つ一つ話さないで、ここまで私たちはすでに結果を出すことができます. a 1==b 1オブジェクトの参照はすべてキャッシュから取り出され、実際には同じオブジェクトであるため、結果のtrue a 2==b 2は128がキャッシュ値の範囲を超えているため、Integerはnewによって構築されたオブジェクトであり、==比較されたオブジェクトの参照がオブジェクトの値ではないため、結果は自然にfalse となる.
以上の例では、Integerだけでなく、パッケージクラス全体にキャッシュメカニズムがあります. Booleanはtrue/falseインスタンスをキャッシュする、すなわちBooleanはBooleanのみを持つ.TRUE/FALSEの2つの定数インスタンス Shortキャッシュ範囲は-128から127の間の である. Byteの範囲は限られており、すべての数値がキャッシュされている など・・・ キャッシュを掘り下げ続ける場合、例えばより広い範囲のIntegerを頻繁に使用する価値があることが明らかになった場合、JVMが提供するパラメータを使用することができます.
Integerは何か注意事項がありますか?は、実際にJavaのコンパイル期間の最適化である着脱ボックスを使用して自動的に着脱/梱包することを避けるべきである.(テクニック)、文法糖ですが、Javaはコンパイル期間中に自動的に変換してくれます.最終的に生成されたバイトコードはあなた自身の変換と同じです.10万個のオブジェクトを何気なく作成することは、プログラムのメモリオーバーヘッドと処理速度にとって大きな代価です. パッケージクラス==演算子による値比較は避けるべき キャッシュメカニズムの範囲 に注意
まとめ
以上、私が大まかに挙げた典型的な答えは、多くの面接に対して上記の内容に答えることができれば合格することができます.一部の会社の面接官は質問が好きで有名で、候補者が知らないと答えるまで、打ち止めることができます.この簡単な問題は、実は深く掘り下げることができる点がたくさんあります.あなたの基本的な仕事がしっかりしているかどうかをさらに考察します.例えば、スレッドの安全なInteger(java.util.concurrentと発注に対する理解を考察する) 基本データ型と参照型の限界(Java汎用型に対する理解を考察する) メモリ内のオブジェクトの構造(オブジェクトヘッダヘッダヘッダ、インスタンスデータInstance Data、Align Fill Padding) intとIntegerの違いは、典型的な高周波面接問題の一つであり、候補者の基本功を考察する問題の一つでもある.ここでは、フレームワークの使用やツールのインストール構成にあまり力を入れないことをお勧めします.基礎知識を深く修練し、基礎原理を理解することは日常開発をよく満たすだけでなく、より遠くまで行くのに役立ちます.
合格したプログラマーとして、基本的な仕事がしっかりしていないと、あなたのプログラムに診断しにくい奇妙な問題がたくさん現れることを知っています.例えば過大なオーバーヘッド(頻繁なGCによるプログラムカートンの発生やOOMの発生)、Integerキャッシュメカニズムによる奇妙なフィールド(詳しくは後述)なので、面接に関する一連の文章を書いて、ありふれた穴をあけやすい面接問題をまとめたいと思います.今日は面接官の立場に立って、面接の基礎問題についてお話ししたいと思います.そして、面接官が満足できる回答をできるように指導したいと思います
基本回答
intは8つの基本データ型(boolean,byte,short,char,int,float,double,long)の1つである整形型であり、大きさは4バイトを占有し、値範囲は正負2の32(4*8)次べき乗であり、Javaはすべて対象と称されるが、基本データ型は例外である
Integrはintの包装類で、JDK 1.5に導入され、文字列変換、数学演算、汎用型、自動梱包などの実用機能を提供し、関連するプログラミングの難易度を極めて簡略化した.
Interの値キャッシュ範囲について
次に典型的な例を示します.多くの人が踏んだ穴でもあります.プログラムは以下の通りです(機械で実際に操作することをお勧めします).
Integer a1 = 127, b1 = 127;
Integer a2 = 128, b2 = 128;
System.out.println(a1 == b1); // true
System.out.println(a2 == b2); // false
パッケージクラスキャッシュメカニズムの原因
なぜこのような奇妙な状況が発生したのか考えてみましょう.次にIntegerを見てみましょう.valueOfのソースコード
// Integer.valueOf
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
int h = 127;
...
high = h;
}
}
ソースコード内に秘密はないが、JDKによるInteger構造の改善によるキャッシュメカニズムの導入によるものであることがわかる.従来のInteger構造の方式は直接コンストラクタnewの1つのオブジェクトを呼び出すことであるが、考察と調査の結果、多くの人がIntegerを使用するのは小さい範囲に集中していることが分かったため、JDKはIntegerである.valueOfは、構造オブジェクトのパフォーマンスオーバーヘッドを改善するためのキャッシュメカニズムを強化しています(そう、自動梱包逆コンパイル後もvalueOf()メソッドを呼び出して構造オブジェクトを実現します)Java公式ドキュメントは、Integerキャッシュ範囲が-128~127であることを示しています.
この中には細部がたくさんあるので、私たちは一つ一つ話さないで、ここまで私たちはすでに結果を出すことができます.
以上の例では、Integerだけでなく、パッケージクラス全体にキャッシュメカニズムがあります.
-XX:AutoBoxCacheMax=N
Integerは何か注意事項がありますか?
まとめ
以上、私が大まかに挙げた典型的な答えは、多くの面接に対して上記の内容に答えることができれば合格することができます.一部の会社の面接官は質問が好きで有名で、候補者が知らないと答えるまで、打ち止めることができます.この簡単な問題は、実は深く掘り下げることができる点がたくさんあります.あなたの基本的な仕事がしっかりしているかどうかをさらに考察します.例えば、