当我将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设置?
非常感谢您的反馈!
答案 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)