你这个不会改变吧,你打印出来看看。
我猜你疑惑的是容器里存了对象的那种情况,list拿出对象,然后修改对象里的东西会改变,因为list存的是对象的引用(也就是地址了)。
比如这样的:
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Data(1));
list.add(new Data(2));
System.out.println(list);
Iterator itrt = list.iterator();
while (itrt.hasNext()) {
Data x = itrt.next();
x.value = 10;
}
System.out.println(list);
}
}
class Data{
public int value;
public Data(int value){
this.value = value;
}
public String toString(){
return "" + value;
}
}
首先,别名就是引用 ;
其二,Returns the next element in the iteration. 返回的是元素在内存中的地址,而该地址赋予给别名,这就是java的指针。
补充一: java中除去基本数据类型,对象的别名或者引用就相当于C里面的指针;
补充二:别名或引用保存的值是内存地址,而该内存地址就是数据本身(本体),换句话说,就是这个别名或引用能够指向数据本体,神似指针。
这里的x赋值之后,并不会改变list中的值,你确定你的程序运行了之后list中的值改变了?我不信。。。
其实在Java里面你只要搞清楚基本数据类型就行了,接口、数组、对象存在内存里面都是变量名,即也是引用名,它具体的值是存放在另一块内存里面的,而基本数据类型存放的值就是其本身。这里x的内存存的值就是其本身,而list的值是变量引用,它具体的数组值存放在另一块内存里面。
list里面的值怎么会变呢,应该还是1和2吧
不会变的,返回的不是引用,而是数据值