将JSP getparameters分配给数组时出现意外行为

时间:2014-08-25 10:05:43

标签: java jsp

当我将request.getParameters的结果分配给两个不同的字符串数组对象时,有人可以解释以下问题:

我将getParameterValues的值分配给两个不同的字符串数组 然后我更新一个字符串数组的内容。 当我检查另一个字符串数组的值时,它们也已被更改。

// pseudo code below

// assign the values of getParameterValues to a string array
String[] obj1 = request.getParameterValues("some_parameters");

// assign the values of getParameterValues to another string array
String[] obj2 = request.getParameterValues("some_parameters");

// loop through the values of obj1 and update them
for(int i=0; i< obj1 .length; i++)
{
obj1[i] = obj1[i] + " UPDATED VALUE";
}


for(int i=0; i< obj2 .length; i++)
{
// output values in obj2 array 
// THESE HAVE BEEN UPDATED - WHY ?
}

其次,我以在Tomcat下运行的JSP页面的形式运行此代码。我们有两个服务器,这种行为只展示了一个Tomcat服务器 - 即在一个Tomcat服务器上,更改一个字符串数组不会影响另一个。是否有可以解释此行为的Tomcat设置?

非常感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

因为每次获取给定参数的参数值时,容器都选择始终返回相同的数组,而不是创建新数组。所以obj1 == obj2

我不确定你为什么要修改参数值,特别是在JSP中,但如果你想避免这个问题,那么在修改之前先创建一个数组副本:

String[] obj1 = (byte[]) request.getParameterValues("some_parameters").clone();
// or
String[] obj1 = request.getParameterValues("some_parameters");
obj1 = Arrays.copyOf(ob1, obj1.length)
相关问题