目次
知識ポイント1: integerとintの違い" >知識ポイント1: integerとintの違い
ホームページ Java &#&チュートリアル integerとintの違いとinteger.values()メソッドの詳しい説明

integerとintの違いとinteger.values()メソッドの詳しい説明

Jun 26, 2017 am 10:20 AM
integer 違い 方法

免責事項: この記事はブロガーによる再投稿記事です。元のアドレスは記事の最後に記載されています。

知識ポイント1: integerとintの違い

/*
* intは、Javaが提供する8つのプリミティブデータ型の1つです。 Java はプリミティブ型ごとにラッパー クラスを提供します。Integer は Java が int に対して提供するラッパー クラスです。 int のデフォルト値は 0、
* で、Integer のデフォルト値は null
* です。つまり、Integer は未​​割り当ての値と値 0 の違いを区別できますが、int は未割り当ての状況を表現できません。たとえば、試験を受けないこととテストのスコアが 0 点であることの違いを表現したい場合は、整数
* のみを使用できます。 JSP 開発では、Integer のデフォルト値は null であるため、el 式を使用してテキスト ボックスに表示すると、値は空の文字列になりますが、int のデフォルト値は 0 であるため、el 式を使用すると、テキストボックスに表示
* した場合、結果は 0 となるため、Web レイヤーのフォームのデータ型として int は適していません。
* Hibernate では、OID が Integer 型として定義されている場合、Hibernate は値が null かどうかに基づいてオブジェクトが一時的であるかどうかを判断できます
* * OID が int 型として定義されている場合は、その値を設定する必要がありますhbm マッピング ファイルの unsaved-value 属性を 0 に設定します。
* さらに、Integer は、文字列を整数に変換するなど、複数の整数関連の演算メソッドを提供します。また、整数の最大値と最小値を表す定数も定義します。
*/

知識ポイント2: integer.values()メソッドの詳しい説明

1System.out.println(Integer.valueOf("127")==Integer.valueOf ("127"));
2
3
システム。 out. println(Integer.valueOf("128")==Integer.valueOf( class= "java string">"128"));
System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));System.out.println(Integer.parseInt ("128")==Integer.valueOf( "128 "));

最初の判定では true が返され、2 番目の判定では false が返されるのはなぜですか? 127 および 128私が知らない違いはありますか? (もちろん127未満128...)

true而第二个判断返回了false127128有什么我不知道的区别吗?(当然除了127小于128…)

还有,为什么第三个判断返回了true
我看了另一个相关提问的回答,但是我还是不知道它们什么时候返回true还有为什么第二个判断返回false

  回答#1:

Integer.valueOf(String)确有一个不同寻常的行为。

valueOf会返回一个Integer(整型)对象,当被处理的字符串在-128127(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回true-127

这个整型对象是被缓存的(所以两次valueOf返回的是同一个对象)——第二行的调用返回false是因为128没有被缓存,所以每次调用,都会生成一个新的整型对象,

因此两个128整型对象是不同的对象。

重要的是你要知道在上面的比较中,你实际进行比较的是integer.valueOf返回的对象引用,所以当你比较缓存外的整型对象时,相等的判断不会返回true,就算你

传个valueOf的值是相等的也没用。(就像第二行中Integer.valueOf(128)==Integer.valueOf(128))。想让这个判断返回true,你需要使用equals()方法。

parseInt()返回的不是整型对象,而是一个int型基础元素。这就是为什么最后一个判断会返回true,第三行的判断中,在判断相等时,实际比较的是128 == 128

所以它必然是相等的。

再来说说第三种比较中的一点区别,使得它的结果与第二种比较不一样了:

一个unboxing conversion(一种比较时的转换,把对对象的引用转换为其对应的原子类型)在第三行的比较中发生了。因为比较操作符使用了==同时等号的两边

存在一个int型和一个Integer对象的引用。这样的话,等号右边返回的Integer对象被进一步转换成了int数值,才与左边进行相等判断。

所以在转换完成后,你实际比较的是两个原子整型数值。这种转换正是你在比较两个原子类型时所期待看到的那样,所以你最终比较了128等于128

 

  回答#2:

Integer类有一个静态缓存,存储了256个特殊的Integer对象——每个对象分别对应`-128 和127之间的一个值。
有了这个概念,就可以知道上面三行代码之间的区别。

1
new Integer(123);また、3 番目の判定で trueが返されるのはなぜですか>?
関連する別の質問への回答を読みましたが、いつ true が返されるのか、また、なぜ 2 番目の判定で false が返されるのかがわかりません。

答え #1:

Integer.valueOf(String)確かに存在します。異常な動作が 1 つあります。

valueOf は、処理される文字列が Integer (整数) オブジェクトを返します。 >-128 および 127 (両端を含む) の場合、返されるオブジェクトは事前にキャッシュされます。これが、最初の行の呼び出しが true-127

この整数オブジェクトがキャッシュされる理由です。 valueOf は同じオブジェクトを 2 回返します) - 128 がキャッシュされていないため、2 行目の呼び出しは false を返します。そのため、呼び出されるたびに、新しい整数オブジェクトが生成されます。

そのため、2 つの 128 整数オブジェクトは別のオブジェクトです。

上記の比較では、実際に比較しているのは integer.valueOf であることを知っておくことが重要です返されたオブジェクト参照。したがって、キャッシュの外にある整数オブジェクトを比較する場合、等価性の判定は true を返しません。

値が等しい場合、valueOf を渡しても意味がありません。 (2 行目の Integer.valueOf(128)==Integer.valueOf(128)) のように。この判定で true を返すようにするには、equals() メソッドを使用する必要があります。

parseInt() は整数オブジェクトではなく、int 基本要素を返します。これが、最後の判定で true が返される理由です。等しいかどうかを判定するとき、実際の比較は 128 == 128

したがって、等しい必要があります。

3 番目の比較の小さな違いについて説明します。これにより、結果が 2 番目の比較とは異なります。

3 行目の比較中に、アンボックス化変換 (オブジェクトへの参照を対応するアトミック タイプに変換する比較変換) が発生します。比較演算子は == と等号の両側を使用するため

int 型があり、 Integer オブジェクトへの参照。この場合、等号の右側で返された Integer オブジェクトは、左側と等しくなる前に、さらに int 値に変換されます。

変換が完了すると、実際には 2 つのアトミック整数値を比較することになります。この変換は、2 つのアトミック タイプを比較するときに期待されるものとまったく同じであるため、最終的には 128128 を比較することになります。

答え 2:

Integer クラス256 個の特殊な Integer オブジェクトを格納する静的キャッシュがあり、それぞれが `-128 から 127 までの値に対応します。
この概念を使用すると、上記の 3 行のコードの違いを知ることができます。

1
new Integer(123);
🎜🎜

新しい Integer オブジェクトが作成されたことが示されています。

1Integer对象。
1
Integer.parseInt("123");

解析完字符串后返回一个int值。

1
Integer.valueOf("123");

这种情况比其他的要更复杂一些。首先进行了字符串解析,然后如果解析的值位于-128127之间,就会从静态缓存中返回对象。如果超出了这个范围,就会调用

Integer()方法并将解析的值作为参数传入,得到一个新的对象。

现在,让我们看一下问题中的3个表达式。

1
Integer.valueOf("127")==Integer.valueOf("127");

上面的表达式返回true,因为Integer的值从静态缓存中取了2次,表达式返回了对象与自己比较的结果。因为只有一个Integer对象,所以返回结果为true

1
Integer.valueOf("128")==Integer.valueOf("128");
Integer.parseInt("123");
🎜🎜🎜 🎜解析完字符の後には、int 値が返されます。
1🎜🎜
Integer.valueOf("123");🎜🎜🎜🎜🎜🎜🎜🎜🎜最初に文字列の解析が実行され、解析された値が -128127 の間にある場合は、静的に保存されます。この範囲を超えた場合は、🎜Integer() メソッドが使用され、解析された値がパラメータとして渡され、新しいオブジェクトが取得されます。🎜
1🎜🎜
整数。 valueOf("127")==Integer.valueOf("127");🎜🎜🎜🎜🎜🎜🎜🎜🎜上の表达式はtrueを返します、のせいです整数の値は静的ストレージから2回取得され、表形式はオブジェクトを自分自身と比較した結果を返します。整数オブジェクトが1つしかないため、結果はtrueとして返されます。
1🎜🎜
Integer.valueOf("128" )==Integer.valueOf("128") ;🎜🎜🎜🎜🎜🎜

128 が静的バッファーに存在しないため、上記の式は false を返します。したがって、等しいと判断されるたびに、方程式の両側に新しい Integer オブジェクトが作成されます。 2 つの Integer オブジェクトは異なるため、== は、方程式 false,因为128没有存在静态缓冲区。所以每次在判断相等时等式两边都会创建新的Integer对象。由于两个Integer对象不同,所以==只有等式

两边代表同一个对象时才会返回true。因此,上面的等式返回false

1
Integer.parseInt("128")==Integer.valueOf("128");

上面的表达式比较的是左边的原始int128与右边新创建的Integer对象。但是因为intInteger之间比较是没有意义的,所以Java在进行比较前会将Integer

自动拆箱,所以最后进行的是intint值之间的比较。由于128和自己相等,所以返回true

の両辺が同じオブジェクトを表す場合にのみ true を返します。したがって、上記の式は false を返します。 🎜
1🎜
Integer.parseInt("128")==Integer.valueOf("128");🎜🎜
🎜🎜🎜上記の式は、左側の元の int 値を比較します128 と、右側に新しく作成された Integer オブジェクト。ただし、intInteger の比較は無意味であるため、Java は比較の前に Integer🎜

を変換します。最後の比較は、int 値と int 値の間で行われます。 128 はそれ自体と等しいため、true が返されます。 🎜

以上がintegerとintの違いとinteger.values()メソッドの詳しい説明の詳細内容です。詳細については、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)

Nexo Exchangeは安全ですか? Nexo Exchangeは安全ですか? Mar 05, 2025 pm 07:39 PM

Nexo:それは暗号通貨交換であるだけでなく、デジタルファイナンシャルマネージャーでもあります。これにより、ユーザーは担保として暗号通貨でローンを取得することができ、関心を得るためのサービスを提供します。 Nexoは暗号通貨の購入、販売、償還機能も提供していますが、その中心的なビジネスは暗号融資です。この記事では、投資家により包括的な理解を提供するために、Nexoの運用モデルとセキュリティを詳細に調査します。 Nexoのオペレーティングモデルは2018年に設立され、スイスのZugに本社を置き、デジタルファイナンスの分野の先駆者です。これは、他の集中交換とは異なり、包括的な金融サービスの提供に重点を置いています。ユーザーは、資産を販売せずに暗号通貨を売買、取引することができます

マルチスレッドと非同期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の文字範囲が大きく、特別な機能が算術演算に使用されます。

Bean BreadとDeepseekの違いは何ですか Bean BreadとDeepseekの違いは何ですか Mar 12, 2025 pm 01:24 PM

Bean BunとDeepseekのコアの違いは、検索の精度と複雑さです。 1. Doubaoは、シンプルで直接的なキーワードのマッチングに基づいていますが、低コストですが、精度が低く、構造化されたデータにのみ適しています。深い学習に基づいています。最終的な選択は、アプリケーションのシナリオとリソースの制限に依存します。

暗号投資のメンタリティは非常に重要です!不必要な心配を避け、正しい決定を下す方法は? 暗号投資のメンタリティは非常に重要です!不必要な心配を避け、正しい決定を下す方法は? Mar 05, 2025 pm 07:24 PM

暗号投資の恐怖、不確実性、疑い:情報に基づいた意思決定を行う方法は?多くの暗号投資家は、「これは最後のサイクル」に対する恐怖と、強気市場の期間に関する懸念に直面しており、他の人からの圧力と相まって、それが一緒になって投資の決定につながります。この記事では、これらの課題を克服し、より賢い投資の選択をする方法を模索します。潜在的なリスク:気晴らし:盲目的にホットスポットを追いかけ、コア資産の価値を無視します。悲観主義とためらい:不確実性は、自信の欠如、長い間保持できないこと、さらには市場から退場することにつながります。信念の欠如:プロジェクトに関する詳細な研究の欠如であり、市場のボラティリティに対処できません。利益作成戦略の欠如:プルバックの恐怖、潜在的なリターンの欠落のために、ポジションを早期にクリアする。対処戦略:1。コア領域に焦点を当てる:

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

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

See all articles