Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSP getparameters分配给数组时出现意外行为_Java_Jsp - Fatal编程技术网

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

Java 将JSP getparameters分配给数组时出现意外行为,java,jsp,Java,Jsp,当我将request.getParameters的结果分配给两个不同的字符串数组对象时,是否有人可以解释以下问题: 我将getParameterValues的值分配给两个不同的字符串数组 然后更新一个字符串数组的内容。 当我检查其他字符串数组的值时,它们也被更改了 // pseudo code below // assign the values of getParameterValues to a string array String[] obj1 = request.getParamet

当我将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 ?
}
//下面是伪代码
//将getParameterValues的值分配给字符串数组
String[]obj1=request.getParameterValues(“某些_参数”);
//将getParameterValues的值分配给另一个字符串数组
String[]obj2=request.getParameterValues(“某些_参数”);
//循环遍历obj1的值并更新它们
对于(int i=0;i
其次,我以在Tomcat下运行的JSP页面的形式运行此代码。我们有两台服务器,这种行为只在一台Tomcat服务器上表现出来,即在一台Tomcat服务器上,更改一个字符串数组不会影响另一台。是否有一个Tomcat设置可以解释这种行为


非常感谢您的反馈

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

我不知道为什么要修改参数的值,特别是在JSP中,但如果要避免此问题,请在修改之前创建数组的副本:

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

如果我说request.getParameterValues是一个对象,那么:obj1=objParameters;obj2=OBJ参数;因此obj1==obj2==OBJ参数?这是因为它是一个字符串数组(对象),而不是一个字符串-当我处理单个字符串时,我没有得到相同的行为。谢谢字符串和数组都是对象。字符串是不可变的,因此您无法修改字符串。数组是可变的。啊,这是有道理的。非常感谢。知道为什么不同服务器上的行为会不同吗?这个问题是在代码迁移到另一台服务器时发现的。我不知道。也许是不同的版本,也许你没有完全使用相同的代码?谢谢你花时间回复-非常感谢!