栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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
” 替换您的“ ”(来自“
inti
”)
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;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号