1

オブジェクトの配列をループしているときに、プリミティブデータ型の使用が2番目の「for-each」ループで機能するのはなぜですか。舞台裏で発生しているIntegerオブジェクトに相当するプリミティブへのキャストバックはありますか?

import java.util.Arrays;
import java.util.Collections;

public class CodeTestingClass 
{

    public static void main(String[] args) 
    {

     Integer[] array = {1,2,3,4,5};

     Collections.rotate(Arrays.asList(array), 1);

     System.out.println(Arrays.toString(array) + "\n" );

  for(Integer i : array)
  {

   System.out.print(i);

  }

  System.out.print("\n");

  for(int i : array)
  {

   System.out.print(i);

  }  

    }
}
4

2 に答える 2

5

自動開梱です、それだけです。それを実証するために何かを繰り返す必要はありません。

Integer x = 10;
int y = x;

Java言語仕様のセクション5.1.8から:

アンボックス変換は、参照型の値をプリミティブ型の対応する値に変換します。

(そこにはさらにいくつかの詳細がありますが、ほとんどは変換のリストにすぎません。)

セクション5.2は、割り当て変換のコンテキストで利用可能であるとして、開箱変換を呼び出します。

于 2010-07-24T22:20:56.153 に答える
2

これは、Javaベースタイプ(int、、、など)の場合、「自動ボクシング」と自動アンボックスを実行するbyteためですshort

コレクションからオブジェクトを取り出すと、入力した整数が取得されます。intが必要な場合は、intValueメソッドを使用して整数のボックスを解除する必要があります。このボクシングとアンボクシングはすべて面倒で、コードが乱雑になります。自動ボックス化およびボックス化解除機能はプロセスを自動化し、苦痛と混乱を排除します。

于 2010-07-24T22:21:25.543 に答える