Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';这不是每个循环的工作吗?_Java_Foreach - Fatal编程技术网

Java 为什么';这不是每个循环的工作吗?

Java 为什么';这不是每个循环的工作吗?,java,foreach,Java,Foreach,在这段代码中,为什么我的数组没有按我希望的那样初始化?for-each循环的设计目的不是为了实现这一点,还是我没有正确地使用它 int[] array = new int[5]; //initialise array -> Doesn't work! Array still full of 0's for(int i : array) i = 24; int是系统中的一种基本类型,因此实际上您得到的是数组中单元格值的副本,而不是数组中可以分配到的

在这段代码中,为什么我的数组没有按我希望的那样初始化?for-each循环的设计目的不是为了实现这一点,还是我没有正确地使用它

    int[] array = new int[5];

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

int是系统中的一种基本类型,因此实际上您得到的是数组中单元格值的副本,而不是数组中可以分配到的单元格的引用

让我来解释一下。如果您有一个X数组,其中X是一个具有数据成员的类,那么您将在每次迭代中获得对不同单元格的引用,并且能够通过调用其上的函数(例如setValue)来更改其状态


当你有int时,情况就不同了,你的int不是一个引用,它是堆栈上的一个实际值,因为它是一个基元类型,所以在每次迭代中,for都会将一个值从数组复制到i。然后更新i,但这对数组没有影响。

i
只是数组中该点的int的一个副本,而不是对它的引用。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;
}
将被翻译成如下内容:

Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
    Date d = array[i];
    d = new Date();
}
改为这样做:

int[] array = new int[5];

// initialise array -> Will work now
for(int i = 0 ; i< array.length ; i++)
    array[i] = 24 ;
int[]数组=新的int[5];
//初始化数组->现在可以工作了
for(int i=0;i
使用

java.util.array.fill(数组,24)


如果要初始化为相同的值。除此之外,Eddie在翻译for each构造时非常准确。

然而,这并不是失败的确切原因。它与int是基元无关。您不能使用for each初始化任何数组,无论其内容是否为基元。除非您的类具有要调用的显式setValue()。如果使用对象数组,此代码将不会初始化数组。这与这里的变量是基元无关,因为他在使用赋值。但如果这些是对象,他就不会使用赋值来设置值。如果这是对象数组上的循环,那么最终将得到一个满是null的数组。看看我的答案。不能用for-each循环初始化任何数组或集合。我不想每次都写出所有这些。看来我逃不了(欢迎来到程序员生活中的重复键入方面实际上,它不是用迭代器转换成while循环吗?我不是想给出确切的转换,而是想知道为什么它不起作用。@Matt Olenik:不,显然不是。我编译了代码,然后用jad查看生成了什么代码,至少对于一个数组,for循环是这样的。)生成,不是一个while循环。很好!从现在起我将大量使用该类!其他问题不应该重复吗?这是第一个。
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;
}
int[] array = new int[5];

// initialise array -> Will work now
for(int i = 0 ; i< array.length ; i++)
    array[i] = 24 ;