帮我看看这个程序

06-03-01 xqf_1999
package com.test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Iterate {

List list = new ArrayList();

public void test() throws java.util.NoSuchElementException

{

list.add("1");

list.add("2");

list.add("3");

list.add("4");

list.add("5");

list.add("6");

list.add("7");

list.add("8");

list.add("9");

list.add("0");

Iterator it1 = list.iterator();

Iterator it2 = it1;

for(int i=1;i<6;i++)

{

System.out.println(it1.next()+"---->"+it2.next());

}

}

public static void main(String[] args)

{

new Iterate().test();

}

}

结果:

1---->2

3---->4

5---->6

7---->8

9---->0

但我认为应该是:

1---->1

2---->2

3---->3

4---->4

。。。。。

9---->9

0---->0

为什么不是那? 想不明白,请高手帮忙。

bjshasha
2006-03-03 15:20
问提出在这一句

Iterator it2 = it1;

对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身,而在用"="向对象变量赋值的时候属于"引用传递",在Iterator it2 = it1;这句执行后it1和it2操作同一个内存空间的数据

区别可以看看下面这个修改后的代码

package test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Iterate {

	List list = new ArrayList();

	public void test() throws java.util.NoSuchElementException {

		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		list.add("6");
		list.add("7");
		list.add("8");
		list.add("9");
		list.add("0");

		System.out.println("======== different Obhject in memory =========");
		Iterator it1 = list.iterator();
		Iterator it2=list.iterator();
		while(it1.hasNext() && it2.hasNext())
		{
			System.out.println(it1.next() + "---->" + it2.next());
		}
		
		System.out.println("======== the same one in memory =========");
		Iterator it3=list.iterator();
		Iterator it4=it3;
		while(it3.hasNext() && it4.hasNext())
		{
			System.out.println(it3.next() + "---->" + it4.next());
		}
		

	}

	public static void main(String[] args) {
		new Iterate().test();
	}
}

<p>

猜你喜欢