`
nickdine
  • 浏览: 44505 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

for 和 foreach

阅读更多
for中通过数组下标取得的对象是引用 可以重新指向新的对象 进行操作 同步改变数组中的对象

foreach是自动的复制对象 即使在循环中改变对象的引用 也只是修改的是复制之后的中间引用 并不能直接改变数组中的原数据

 

public class littleTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
       test[] tC=new test[2];
       tC[0]=new test(1);
       tC[1]=new test(2);//1 2赋值给tC
         for(int j=0;j<tC.length;j++)
         {
        	tC[j] =new test(-1);//数组下标修改对象
         }
        for (test t : tC)
		{
			System.out.println(t.value);//输出修改后的对象
		}
        
        
        
        //for是直接下标的引用 可以修改内容 
        
        tC[0]=new test(1);
        tC[1]=new test(2);
        for (test t2 : tC)
		{
//			t2=new test(-2);//修改foreach自动复制的对象
 		}
        for (test t3 : tC)
		{
        	System.out.println(t3.value);//仍然打印出原数组的内容
		}
      
    
    
    //for是直接下标的引用 可以修改内容 
    
    tC[0]=new test(1);
    tC[1]=new test(2);
    for (test t2 : tC)
	{
     	t2.value=-3;//直接修改 可修改未重新复制引用
	}
    for (test t3 : tC)
	{
    	System.out.println(t3.value);//仍然打印出原数组的内容
	}
 }

}

class test
{
	int value;
	public test(){
		value=-1;
	}
	public test(int f)
	{
		value=f;
	}
}



结果 

    -1
    -1
    1
    2
    -3
    -3


原因
for ( test  t: tC) {
       test  = new test  ();
     }

     相当于

     for(){

     test  t=a[i];

     t=new test  ();

     }
foreach中的对象实际是对数组对象的引用的引用,修改这个引用指向其他引用 则不会对数据产生影响 但是修改这个引用指向的对象的值 却是可以修改数组内容的
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics