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

发布于 2024-09-11 10:28:27 字数 546 浏览 5 评论 0原文

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

  }  

    }
}

Why does using a primitive data type work in the second "for-each" loop when I am looping over an array of objects. Is there a casting back to the primitive equivalent of the Integer object occurring behind the scenes?

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);

  }  

    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你不是我要的菜∠ 2024-09-18 10:28:28

就是自动拆箱,仅此而已。无需迭代任何内容即可证明这一点:

Integer x = 10;
int y = x;

根据 Java 语言规范,第 5.1.8 节

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

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

第 5.2 节 指出拆箱转换在赋值转换的上下文中可用。

It's auto-unboxing, that's all. There's no need for iterating over anything to demonstrate that:

Integer x = 10;
int y = x;

From the Java Language Specification, section 5.1.8:

Unboxing conversion converts values of reference type to corresponding values of primitive type.

(There are a few more details there, but it's mostly just the list of conversions.)

Section 5.2 calls out unboxing conversions as being available in the context of assignment conversions.

女中豪杰 2024-09-18 10:28:28

这是因为对于 Java 基本类型(intbyteshort 等),它执行“自动装箱" 和自动拆箱。

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

It's because for the Java base types (int, byte, short, etc.), it performs "autoboxing" and autounboxing.

When you take the object out of the collection, you get the Integer that you put in; if you need an int, you must unbox the Integer using the intValue method. All of this boxing and unboxing is a pain, and clutters up your code. The autoboxing and unboxing feature automates the process, eliminating the pain and the clutter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文