java - 使用增强的 for 循环时数组是否被转换?

标签 java arrays unboxing

Java 5 或更高版本是否对数组应用某种形式的“装箱”?当以下代码像 Iterable 一样遍历数组时,我想到了这个问题。

for( String : args ){
// Do stuff
}

最佳答案

数组不是原语。基元是不是对象的东西。只有 boolean、char、byte、short、int、long、float 和 double 是原语。数组是具有特殊语法的对象。如果您可以在 Java < 5 中的类型上调用 toString(),则它不是原始类型。

所有自动装箱所做的就是将基元与需要对象(例如 ArrayList)的对象相互转换。它允许这样的代码:

List<Integer> l = new ArrayList<Integer>();
l.add( 7 );
int i = l.get(0);

简写为:

List<Integer> l = new ArrayList<Integer>();
Integer ii = Integer.valueOf( 7 )
l.add( ii );
int i = l.get(0).getIntValue();

这就是自动装箱的全部功能。由于 String 已经是一个对象(与 C 中不同,它不等同于 char[]),因此无需对 String 进行装箱/拆箱。


编辑:如前所述添加了 boolean 值

关于java - 使用增强的 for 循环时数组是否被转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216768/

相关文章:

Java Play - 将对象列表与内部的 Map<String, AnotherObject> 绑定(bind)

java - 在 java 中按列标题对二维列表进行排序

c - 数组的基址

java - 如何验证序列中的3个数字相等?

java - 无法进行非静态引用

c# - object[] 是否装箱

java - 在 eclipse rcp 应用程序中使用 css 边框属性

java - 典型的 EJB3/JPA/JSF 中的事务范围是什么?

c# - "as"和可空类型的性能惊喜

c# - 装箱和拆箱 : Why doesn't this delegate match?