免責事項: この記事はブロガーによる再投稿記事です。元のアドレスは記事の最後に記載されています。
/*
* 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()メソッドの詳しい説明
23 | System.out.println(Integer.valueOf(システム。 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
而第二个判断返回了false
?127
和128
有什么我不知道的区别吗?(当然除了127
小于128
…)还有,为什么第三个判断返回了true
?
我看了另一个相关提问的回答,但是我还是不知道它们什么时候返回true还有为什么第二个判断返回false
。
回答#1:
Integer.valueOf(String)
确有一个不同寻常的行为。
valueOf
会返回一个Integer
(整型)对象,当被处理的字符串在-128
和127
(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回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:
この整数オブジェクトがキャッシュされる理由です。 そのため、2 つの 上記の比較では、実際に比較しているのは 値が等しい場合、
3 番目の比較の小さな違いについて説明します。これにより、結果が 2 番目の比較とは異なります。 3 行目の比較中に、アンボックス化変換 (オブジェクトへの参照を対応するアトミック タイプに変換する比較変換) が発生します。比較演算子は
変換が完了すると、実際には 2 つのアトミック整数値を比較することになります。この変換は、2 つのアトミック タイプを比較するときに期待されるものとまったく同じであるため、最終的には
答え 2:
新しい
|
以上がintegerとintの違いとinteger.values()メソッドの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。