繁体   English   中英

会话如何在java中工作?

[英]How does session work in java?

如果我把地图放在会话中。 然后,如果我从地图中删除一个对象。 这会改变会话中的地图还是我必须再次将地图放入会话中?

            Map map = new HashMap();

        map.put("1", "1");
        map.put("2", "2");
        map.put("3", "3");
        map.put("4", "4");

        Session session = getSession();

        session.setAttribute("myMap", map);

        map.remove("1");

是的它会在会话中更新地图......

 Map map = new HashMap();
        map.put("1", "1");
        map.put("2", "2");
        map.put("3", "3");
        map.put("4", "4");
        session.setAttribute("myMap", map);

        map.remove("1");
        Object mapw = session.getAttribute("myMap");  
        out.println(mapw);

产量

{3=3, 2=2, 4=4}

会话保留对您放入的对象的引用。如果更改了地图的内容,则地图对象引用不会更改。 它仍然是相同的地图,因此会话中的信息也会发生变化。

像这样:

Map original_map = new HashMap();
session.setAttribute("myMap", original_map);

// Now put something into original_map...
// The _content_ of the map changes

// Later:
Map retrieved_map = session.getAttribute("myMap");

// you'll find that retreived_map == original_map.
// They're the same object, the same Map reference.
// So the retrieved_map contains all that you put into the original_map.

您的地图仍保留在会话中。 但是,在这种情况下使用WeakHashMap可能是更好的做法。 请参阅以下链接

弱哈希地图讨论

是的,它会更新。

这背后的原因是Java中的所有对象都是通过引用传递的,除非访问者返回对象的副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM