使用增强的for循环(转)

本文介绍了Java5中引入的增强for循环,展示了如何利用这种新语法简化数组和集合的遍历操作,同时讨论了泛型和自动装箱等特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用增强的for循环

 

在一些编程语言中,通过列表或数组可以非常方便 地进行遍历,通过一个循环即可逐个遍历项并将该项赋值一个局部变量从而实现自动循环。我曾经告诉过一个同事我认为Java中的“for”循环功能是不完全 的,因为它没有“for-each”。我的朋友也是一个有经验的Java开发人员,他的回答是“你疯了吗?,在Java中当然有for!”在此之后很长一 段时间里他为此而不断地嘲笑我,并定期地提醒我在Java中存在for(为了防止我遗忘此事) 。但是我有一个好消息要告诉他和所有Java开发人员:目前在Java中有了真正的for!

考虑这样一种情况,你希望对一个整型对象集合(如java.util.ArrayList)中的所有数值求和。你很可能编写过类似于下面这样的代码:

  ArrayList theList = new ArrayList();

  theList.add(new Integer(2));

  theList.add(new Integer(3));

  theList.add(new Integer(5));

  theList.add(new Integer(7));

  int sum = 0;

  // The old way to iterate

  for (Iterator iter = theList.iterator(); iter.hasNext(); ) {

Integer x = (Integer) iter.next();

sum = sum + x.intValue();

  }

  System.out.println("The sum is " + sum);

这段代码多麻烦啊,难道编译器不应该知道你正在进行迭代吗?毕竟这是一个for循环,不是吗?而在Java 5中,增强的for循环现已支持集合对象。因此不再需要使用迭代器。在下面的修订的代码中,一个for循环通过列表进行迭代并显示出每个值:

  ArrayList<Integer> theList = new ArrayList<Integer>();

  theList.add(2);

  theList.add(3);

  theList.add(5);

  theList.add(7);

  int sum = 0;

  // new Java 5 iteration syntax

  for (Integer item : theList) {

sum = sum + item;

  }

  System.out.println("The sum is " + sum);

for循环定义了一个叫做item的局部变量,在每次迭代过程中,它将得到列表中的下一个值。除了完美的for循环语法外,此代码在以下两个方面也不同于过去的Java代码。

使用了泛型

上面带有尖括号的语法是Java 5新增加的泛型特性。泛型允许为一些具体类型的对象定义类,但是直到创建该类的一个实例时才能知道具体的类型。编译器将会强迫执行类型检查。在这个示例 中,ArrayList是一个特殊的类,对于add方法它只接受整数(并只从它的Iterator的next方法中返回整数)。这意味着当从列表中检索对 象时不需要强制类型转换,可以立即将它们作为Integer实例来对待。不使用泛型时,仍可以使用新的for循环语法,但需要将Object强制转换成 Integer。在1.4节中将我们更详细地介绍泛型。

整型对象到整型数值的自动转换

在Java 5中,可以将Integer对象作为int来对待。编译器将自动执行从int到Integer对象的转换(反之亦然),此过程称为自动装箱(autoboxing)。当循环中得到一个Integer对象时,可以将它与一个int值相加而不需要执行显式的转换。

新的for语言也适用于数组:

  int[] theList = new int[] {2,3,5,7};

  int sum = 0;

  for (int x : theList) {

sum = sum + x;

  }

  System.out.println("The sum is " + sum);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值