[解決済み] なぜ、Javaではいまだにプリミティブ型が使われているのでしょうか?
質問
Java 5以降、プリミティブ型のボックス化/アンボックス化が行われ、以下のようになりました。
int
がラップされて
java.lang.Integer
といった具合に。
最近、新しいJavaのプロジェクトをよく見かけますが、(その
間違いなく
を使用している場合、少なくともバージョン 5 の JRE が必要です。
int
ではなく
java.lang.Integer
に変換するためのヘルパーメソッドがいくつか用意されているので、後者を使うほうがずっと便利です。
long
値など。
なぜ、いくつかの 今も Javaではプリミティブ型を使っていますか?何か具体的な利点があるのでしょうか?
どのように解決するのですか?
ジョシュア・ブロッホの 効果的なJava 項目5: "不要なオブジェクトの作成を避ける"では、次のようなコード例を掲載しています。
public static void main(String[] args) {
Long sum = 0L; // uses Long, not long
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}
で、実行に43秒かかります。Longをプリミティブに取り込むと6.8秒に...。プリミティブを使う理由がこれでわかると思います。
ネイティブな値の等価性がないのも気になるところです(
.equals()
と比べると、かなり冗長です。
==
)
を biziclop に変更しました。
class Biziclop {
public static void main(String[] args) {
System.out.println(new Integer(5) == new Integer(5));
System.out.println(new Integer(500) == new Integer(500));
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
}
}
結果が出る。
false
false
true
false
<サブ
EDIT
なぜ(3)が返ってくるのか
true
を返し、(4)は
false
?
2つの異なるオブジェクトだからです。ゼロに最も近い256個の整数 [-128; 127] はJVMによってキャッシュされているので、それらについては同じオブジェクトを返します。しかし、その範囲を超えるとキャッシュされないので、新しいオブジェクトが作成されます。さらに複雑なことに、JLSは以下のことを要求しています。 少なくとも 256個のフライウェイトがキャッシュされます。JVMの実装者は、彼らが望むなら、より多くを追加することができます。つまり、最も近い1024がキャッシュされ、それらのすべてが真を返すシステム上で実行することができます... #awkward
関連
-
javaの模造品QQ WeChatのチャットルーム
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み】なぜJava Genericsはプリミティブ型をサポートしないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
プロジェクトの依存関係を解決できなかった 解決
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み】なぜJava Genericsはプリミティブ型をサポートしないのですか?