繁体   English   中英

在对象数组上使用for-each-“ Integer [] array”-为什么“ for(int i:array)”有效?

[英]Using for-each over an array of Objects - “Integer[] array” - Why Does “for(int i : array)” Work?

当我遍历对象数组时,为什么在第二个“ 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);

  }  

    }
}

这就是自动拆箱。 无需进行任何迭代来证明:

Integer x = 10;
int y = x;

根据Java语言规范的第5.1.8节

拆箱转换将引用类型的值转换为原始类型的对应值。

(那里还有更多详细信息,但主要只是转化列表。)

5.2节将取消装箱转换称为在分配转换的上下文中可用。

这是因为对于Java基本类型( intbyteshort等),它执行“ autoboxing ”和autounboxing。

当您从集合中取出对象时,您将得到放入的Integer。 如果需要一个int,则必须使用intValue方法将Integer拆箱。 所有这些装箱和拆箱都很麻烦,并且会使您的代码混乱。 自动装箱和拆箱功能使过程自动化,消除了痛苦和混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM