日期:2014-05-20  浏览次数:20700 次

请教一个for()的问题
public   class   Test
{
public   static   void   main(String[]   args)
{
int[]   index   =   {3,4,5};

for(int   t   :   index)
{
                                                //问题:这里为什么没有能对数组的值进行操作
t   =   10;
}

for(int   t   :   index)
{
                                                //还是原来的值
System.out.println(t);
}

}
}

------解决方案--------------------
第一个for t是取数组里面的值 没有办法改变数组里面的值


------解决方案--------------------
for(int t : index)
{
//问题:这里为什么没有能对数组的值进行操作
t = 10;
}

等于
for(int i = 0; i < index.length; i++)
{
int t = index[i];
t = 10;//这里怎么改变都没有用
}
------解决方案--------------------
你修改了取出以后的值...
for(int i=0;i <index.length;i++){
index[i] = 10;
}

这么改才有用...
------解决方案--------------------
值拷贝 和 引用拷贝 这两个概念你明白吗?

简单类型 int byte long double float ...这些, 以及String, 虽然String 是一个对象类型,但是他是特殊的,他的运算符是重载过的

对象类型,继承自java.lang.Object的所有对象除了java.lang.String

值拷贝的意思 :
a变量分配内存x1 变量b分配内存x2 当操作 b = a 时, 将x1的存储内容复制给x2

引用拷贝的意思 :
A变量分配内存x1 变量B分配内存x2 当操作 B = A 时, 将B的内存指针指向A的内存地址x1

明白了吧?

public class Test
{
public static void main(String[] args)
{
int[] index = {3,4,5};

for(int t : index)
{
//问题:这里为什么没有能对数组的值进行操作
t = 10;
}

for(int t : index)
{
//还是原来的值
System.out.println(t);
}

}
}

由于是简单类型,你每次改变的都是t本身的值,没有改变index每个元素的值,因此值不会变。