请问:application里面的值会同步变化,这是什么原因

[code="java"]
srvCtx = webCtx.getServletContext();// 获得application对象
// 得到application对象中的访问者列表
visitors = (LinkedList) srvCtx.getAttribute("visitors");//visitors 是LinkedList类型的
for (int i = 0; i < 100; i++) {
saveList.add(visitors.poll());// 获取并移除访问者列表第一个元素,并保存在保存列表中
}
//再次获得web服务器起中visitors值
visitors = (LinkedList) srvCtx.getAttribute("visitors");

System.out.println("现在服务器记录数为:" + visitors.size());//竟然也会减少100个元素
[/code]
本来还想处理一下web服务器,application里面visitors列表变量和本程序visitors列表变量同步问题,现在竟然不用了,想不明白什么原因,难道web服务器对于这个处理有类似C++的指针。请问一下这是啥原因?

visitors = (LinkedList) srvCtx.getAttribute("visitors");
visitors变量和srvCtx中visitors对象实际上是一个对象,可以形象地理解为内存中同一个地址,所以poll后srvCtx中的visitors也减少了
java中引用(如此处的变量visitors)和c中的指针实际上是一样的,只是java没有指针运算吧

for (int i = 0; i < 100; i++) {

saveList.add(visitors.poll());// 获取并移除访问者列表第一个元素,并保存在保存列表中

}

你循环100次当然删除了100个元素了。

visitors其实就是服务器端持久的引用,你删除引用也会影响原始的。

就像你迭代List一样的效果。

呵呵,c++忘了,你google看下引用的定义吧,先把基础夯实了。

上面两位已经说的很明白了,两次getAttribute("visitors"); 得到的是内存中同一个对象的两个不同的引用,打个比喻:小牛有两个儿子,小狗和小猪,小狗的爸爸跟小猪的爸爸是一个对象,如果小狗的爸爸变瘦了,相应的小猪的爸爸不也是变瘦了么。