当前位置: 首页 > 面试题库 >

为什么此for-each循环不起作用?

厍光霁
2023-03-14
问题内容

在这段代码中,为什么不按我的意愿初始化我的数组?是不是for-each循环并非旨在做到这一点,或者我只是没有正确使用它?

    int[] array = new int[5];

    //initialise array -> Doesn't work! Array still full of 0's
    for(int i : array)
        i = 24;

问题答案:

for-each循环不适用于这种情况。您不能使用for-each循环来初始化数组。您的代码:

int[] array = new int[5];
for (int i : array) {
    i = 24;
}

将转换为以下内容:

int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
    int i = array[j];
    i = 24;
}

如果这是一个对象数组,它仍然会失败。基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后可以使用该变量。该变量
等同于数组引用。它只是一个变量。

For-each不能用于初始化 任何 数组或Collection,因为它遍历数组或Collection的当前内容,一次为您提供每个
。for-each中的变量 不是 数组或Collection引用的代理。编译器不会用“ i” 替换您的“ ”(来自“ int i”)array[index]

例如,如果您有一个Date数组,请尝试以下代码:

Date[] array = new Date[5];
for (Date d : array) {
    d = new Date();
}

将被翻译成这样的东西:

Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
    Date d = array[i];
    d = new Date();
}

如您所见,它不会初始化数组。您将最终得到一个包含所有null的数组。

注意:我将上面的代码,将其编译为一个.class文件,然后使用jad对其进行反编译。此过程为我提供了以下代码,这些代码由Sun
Java编译器(1.6)从上面的代码生成:

int array[] = new int[5];
int ai[];
int k = (ai = array).length;
for(int j = 0; j < k; j++)
{
    int i = ai[j];
    i = 5;
}


 类似资料:
  • 问题内容: 在包含forEach循环的行上引发了出站异常,但是据我所知,此代码没有错。for循环从char数组的元素0开始,一直循环直到到达最后一个元素…但是当我尝试使用更长的for循环来执行此代码时,即 该代码按预期工作。 为什么在这种情况下for循环起作用,而forEach循环不起作用? 问题答案: 如果您需要在循环中使用索引访问某些内容,请使用for,而不是foreach(已增强)。 现在,

  • For Each循环用于为数组或集合中的每个元素执行语句或一组语句。 For Each循环类似于For循环; 但是,为数组或组中的每个元素执行循环。 因此,步进计数器将不存在于这种类型的循环中。 它主要用于数组或在File系统对象的上下文中使用,以便递归操作。 语法 (Syntax) 以下是VBA中For Each循环的语法。 For Each element In Group [state

  • 问题内容: 我正在用Java编写电台代码,并且正在使用一个线程来当然播放流。我在线程的run方法中有一个while循环,该循环检查名为ShouldPlay的变量是否为true,以及是否运行该变量。播放器。然后,我有一个pause()方法,将变量设置为false,并且自然希望它在变量为false时不运行播放器。我创建了一个小示例,说明如何在下面进行设置: 我想发生的事情是,当线程首次运行时,它应该打

  • 问题内容: 我在通过jQuery .each()函数循环JSON的键/值时遇到问题 最初我有一个像这样的JSON: 我想遍历JSON中的所有键/值元素(aaa和bbb),并检索内部JSON数组以再次遍历,所以我尝试了 但是,我发现第一个.each()函数会将整个json视为单个结构,并且不会在其元素的键上循环。从.each()函数接收的data参数始终是原始json本身。我永远无法获得指向aaa和

  • 我的代码适用于升序或降序数组输入,如等...但它不适用于混合顺序数组输入,如。

  • 问题内容: 每个循环的通常形式是: 但是,如果我想在循环之后一直保留bar,则 不能 为每个循环使用: for循环获取上述语法错误。 为什么是这样? 我对变通办法不感兴趣,但只是对这种限制背后的考虑感到好奇。 相反,使用普通的for循环,变量可以在外部声明或根本不声明。 问题答案: 这是一个很好的问题,我很乐意看到一些深入的答案。但是,官方文档说: 这些缺点为设计师所知,他们明智地决定采用一种干净