Java 会话中的ArrayList附件
我已经从Java 会话中的ArrayList附件,java,session,servlets,Java,Session,Servlets,我已经从servlet将一个数组列表附加到会话中,附加之后,我正在servlet中清除该arraylist,因此它也从会话中变得清晰 你能给出原因吗???即使你的问题不是很适合堆栈溢出,我想我明白你的意思了 所以你有一个 List<MyClass> myList = new ArrayList<MyClass>(); 并将此myNewList附加到会话。通过这种方式,生成的两个列表可以进行不同的处理,它们可以具有不同的内容。如果你改变一个,另一个将保持不变 但是,我建议
servlet
将一个数组列表附加到会话中,附加之后,我正在servlet
中清除该arraylist
,因此它也从会话中变得清晰
你能给出原因吗???即使你的问题不是很适合堆栈溢出,我想我明白你的意思了 所以你有一个
List<MyClass> myList = new ArrayList<MyClass>();
并将此myNewList
附加到会话。通过这种方式,生成的两个列表可以进行不同的处理,它们可以具有不同的内容。如果你改变一个,另一个将保持不变
但是,我建议您重新思考您的结构,共享信息始终是一个需要仔细处理的问题,是处理此类问题时需要阅读的一本关键书。显然,从会话中可以清楚地看到,这也是因为您在会话中添加了对数组集合的引用。因此,会话中的数组列表对象和代码中的数组列表对象(将列表添加到会话后)都引用内存中的同一对象。因此,如果清除ArrayList对象,则会话中包含的也引用同一对象的底层对象将被清除 要使代码正常工作,您可以做一件事。创建ArrayList的克隆并将该列表放入会话中。然后对你的目标做任何你想做的事。它不会影响驻留在会话中的对象
希望这有帮助。显然,在会话中设置ArrayList后,您将继续使用ArrayList并对其进行编辑 但是您应该知道,您在会话中设置的只是对实际arraylist的内存引用。 您所做的任何更改仍然会影响,因为这两个变量都指向内存中的同一个列表 为了避免,你可以 1) 在会话中设置数组列表后,为变量指定一个null,这样您就不会在不知不觉中继续使用它
ArrayList list = new ArrayList ();
session.setAttribute("list",list);
list = null ; // Assigning the variable to null
您可能正在使用同一个列表对象。非常感谢。我明白了:)
ArrayList list = new ArrayList ();
session.setAttribute("list",list);
list = null ; // Assigning the variable to null