ホームページ Java &#&チュートリアル Integer.valueOf、 Integer.parseInt 、 new Integer

Integer.valueOf、 Integer.parseInt 、 new Integer

Jun 26, 2017 am 10:41 AM
integer java 違い

まずは以下の結果を見てください

1.System.out.println(127==127); //true , int type compare2.System.out.println(128==128); //true , int type compare3.System.out.println(new Integer(127) == new Integer(127)); //false, object compare4.System.out.println(Integer.parseInt("128")==Integer.parseInt("128")); //true, int type compare5.System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); //true ,object compare, because IntegerCache return a same object6.System.out.println(Integer.valueOf("128")==Integer.valueOf("128")); //false ,object compare, because number beyond the IntegerCache7.System.out.println(Integer.parseInt("128")==Integer.valueOf("128")); //true , int type compare
ログイン後にコピー

説明

int整数定数を比較する場合、==は値の比較であるため、1,2はtrueを返します。 1、2は値の比較です。

new Integer() は毎回新しい Integer オブジェクトを構築するため、3 は false を返します。 3 はオブジェクトの比較です。

Integer.parseInt は毎回 int 定数を構築するため、4 は true を返します。 4は値の比較です。

Integer.valueOf は Integer オブジェクトを返します。デフォルトでは、-128 ~ 127 の場合、キャッシュ内の既存のオブジェクト (存在する場合) が返されるため、5 は true を返し、6 は false を返します。図 5 と 6 はオブジェクトの比較です。

7 番目のものは特別で、int と Integer の比較であり、結果は値の比較であり、true を返します。

概要

整数の比較では、まず値の比較であるかオブジェクトの比較であるかを判断します。値の比較は、いずれかが値である場合は必ず true を返します。オブジェクトの比較は、新しい Integer メソッドが使用される場合、毎回新しいオブジェクトが生成されます。Integer.valueOf メソッドの場合は、必ず false が返されます。値の範囲が -128 ~ 127 である場合、同じ値を持つ構築されたオブジェクトは比較後に true を返し、それ以外の場合は false を返します。

したがって、値の比較 == については心配しないでください。もちろん、整数の比較では、オブジェクトの内容を比較するために、最初に整数が null でないかどうかを確認するのが最善です。

知識の拡張

Integer.valueOf ソース コードを分析します

1。呼び出した Integer.valueOf メソッドは、最初に parseInt を呼び出して int 値に変換し、次に独自のオーバーロードされたメソッドを調整します

public static Integer valueOf(String s) throws NumberFormatException {return Integer.valueOf(parseInt(s, 10));
    }
ログイン後にコピー

2. Integer.valueOf オーバーロードされたメソッドは、値 i のサイズに基づいて Integer オブジェクトをキャッシュから取得するかどうかを決定します

 public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
    }
ログイン後にコピー

3. Integer のコンストラクターは非常に単純です

  public Integer(int value) {this.value = value;
    }
ログイン後にコピー

4。静的クラスは Integer 内部クラス、3 つの属性 (キャッシュされた 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;
            String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); //读取VM参数if (integerCacheHighPropValue != null) {try {int i = parseInt(integerCacheHighPropValue); //配置值转换成int数值i = Math.max(i, 127);  //和127比较,取较大者// Maximum array size is Integer.MAX_VALUE(控制缓存数组的大小,最大为整型的最大值,这样一来,h值就必须小于整型最大值,因为要存 -128~0这129个数嘛)h = Math.min(i, Integer.MAX_VALUE - (-low) -1); //实际就是 h=Math.min(i,Integer.MAX_VALUE-129),正整数能缓存的个数} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.                }
            }
            high = h;

            cache = new Integer[(high - low) + 1]; //构造缓存数组int j = low;for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);  //将一些int常量缓存进Integer对象数组缓存中去// range [-128, 127] must be interned (JLS7 5.1.7)assert IntegerCache.high >= 127; //如果小于127,抛异常}private IntegerCache() {}
    }
ログイン後にコピー

上記の Integer.valueOf ソース コードを読むと、デフォルトの Integer キャッシュ int 定数プールを設定できることがわかりますはい、構成方法は VM パラメーターを追加することです。 -Djava.lang.Integer.IntegerCache.high=200

Intellij IDEA 実行構成の VM オプション オプションにパラメーターを追加するだけです。

以上がInteger.valueOf、 Integer.parseInt 、 new Integerの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか Mar 19, 2025 pm 04:54 PM

イーサリアムとビットコインの違いは重要です。技術的には、BitcoinはPowを使用し、EtherはPowからPOSに移行しました。ビットコインの取引速度は遅く、イーサリアムは高速です。アプリケーションシナリオでは、Bitcoinは支払いストレージに焦点を当て、EtherはスマートコントラクトとDAPPをサポートしています。発行に関しては、ビットコインの総量は2100万人であり、エーテルコインの総額は固定されていません。各セキュリティチャレンジが利用可能です。市場価値に関しては、ビットコインが最初にランク付けされ、両方の価格の変動は大きいですが、特性が異なるため、イーサリアムの価格動向はユニークです。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

Ouyi Okexの開幕時間と閉鎖時間の詳細な紹介 Ouyi Okexの開幕時間と閉鎖時間の詳細な紹介 Mar 18, 2025 pm 01:06 PM

OUYI OKEXデジタル資産取引プラットフォームは、従来の証券市場とは異なり、ユーザーはいつでもFIAT通貨取引、通貨取引、契約取引を行うことができます。 ただし、プラットフォームは、システムメンテナンスのアップグレードや特別な市場イベント(深刻な市場の変動を引き起こす極端な市場条件など)の場合、取引の停止や契約取引の開始規則の変更など、取引時間またはルールを事前に発表し、一時的に調整します。したがって、ユーザーはプラットフォームの発表と市場動向に細心の注意を払い、取引の機会をつかみ、リスク管理において良い仕事をすることをお勧めします。 OUYI OKEXの取引時間とルールの調整を理解することによってのみ、デジタル通貨市場で簡単にすることができます。

ApacheまたはnginxはPHPと一緒にどのように連携しますか:mod_php5、php-cgi、およびphp-fpmの違いは何ですか? ApacheまたはnginxはPHPと一緒にどのように連携しますか:mod_php5、php-cgi、およびphp-fpmの違いは何ですか? Apr 01, 2025 pm 12:15 PM

ApacheまたはNginxとPHPの間の共同作業メカニズム:mod_php5、php-cgi、およびphp-fpmの比較は、ApacheまたはNginxを使用してWebサーバーを構築し、バックエンドにPHPを使用することです。

XMLをPDFに変換できるモバイルアプリはありますか? XMLをPDFに変換できるモバイルアプリはありますか? Apr 02, 2025 pm 08:54 PM

XMLをPDFに直接変換するアプリケーションは、2つの根本的に異なる形式であるため、見つかりません。 XMLはデータの保存に使用され、PDFはドキュメントを表示するために使用されます。変換を完了するには、PythonやReportLabなどのプログラミング言語とライブラリを使用して、XMLデータを解析してPDFドキュメントを生成できます。

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

See all articles