这会返回指向值的指针还是复制值?

时间:2012-11-20 03:57:05

标签: java object servlets pointers copy

好吧,我很困惑。我相信它会返回指向原始地图的指针吗?

    private HttpServletRequest originalRequest;
    Map params = originalRequest.getParameterMap();
      params.remove("parameter-to-remove");
      params.put("parameter-to-add", "<a value>");

现在原始请求中的参数会在这些操作后发生变化吗?或者它只是将值复制到params并且我对它们做什么并不重要,并且在originalRequest中不会改变它?

2 个答案:

答案 0 :(得分:4)

返回的地图是不可变的地图,这可能是您没有看到反映的变化的原因。

根据getParameterMap javadoc

  

一个不可变的java.util.Map,包含作为键的参数名称和作为映射值的参数值。参数映射中的键是String类型。参数映射中的值的类型为String array。

如果您想设置一些值来请求,请使用setAttribute

答案 1 :(得分:1)

不,您不能删除或添加任何请求参数到请求对象。它们必须保留(当它们到达服务器时),直到请求对象超出范围(在请求处理周期结束之后)。

逻辑上,如果您被允许做类似的事情,那么请求对象将不再代表原始请求。在整个请求处理周期中,我们希望处理客户端发送的请求,而不是已经被篡改的请求。

您应该使用的方法是void setAttribute(java.lang.String name, java.lang.Object o)