编程语言
首页 > 编程语言> > java-jsp会话:ArrayList反映最新值,但对于String而言,它不

java-jsp会话:ArrayList反映最新值,但对于String而言,它不

作者:互联网

我观察到ArrayList反映了最新的值,但对于String,它没有

//Initializing List and String
ArrayList<String> list = new ArrayList<String>();
list.add("Item1");
String name = "String1";

//Setting Attribute for both
session.setAttribute("mylist", list);
session.setAttribute("myname", name);

//getting attribute for both
out.println("<br> Printing intial valus <br>");
list = (ArrayList<String>)session.getAttribute("mylist");
for (String s:list){
 out.println(s);
}
name = (String) session.getAttribute("myname");
out.println(name);

//updating the values for both
list.add("Item2");
name = "String2";

//Need to add session.setAttribute again for String
//for it to reflect updated value "String 2"
//session.setAttribute("myname", name);

//getting attribute value after the update
list = (ArrayList<String>)session.getAttribute("mylist");
name = (String) session.getAttribute("myname");

//printing the value for both again
out.println("<br><br><br> Prining updated values <br><br>");
for (String s:list){
 out.println(s);
}
out.println(name);

下面的输出是

Printing intial valus 
 Item1 String1 

 Prining updated values 
 Item1 Item2 String1 Session 2

在更新的值部分中,它不应该打印“ String2”,但对于ArrayList,它也要打印“ Item2”.如果我在更新字符串名称值后立即手动添加session.setAttribute(“ myname”,name),则它将打印“ String2”.但是ArrayList不需要此session.setAttribute

解决方法:

ArrayList<String> list = new ArrayList<String>();
list.add("Item1");
String name = "String1";

上面的几行创建了一个名为list的变量,该变量指向内存中具有列表元素“ Item1”的位置(名称为locatino LOC123).
您还创建了一个名为name的变量,该变量指向内存中的某个位置(将其命名为locatino LOC456),其String值为“ String1”.

当您传递名称&列出变量到session.setAttribute方法中,您只传递了列表&的参考值名称变量.
现在,会话对象是指LOC123&内存中的LOC456,使其可以检索实际值.

当您执行list.add(“ Item2”);时该命令将一个元素添加到相同的存储位置LOC123.鉴于会话已指向LOC123,您设法看到了反映的更改值.

Java字符串是不可变的,一旦创建它们就无法更改.当您执行name =“ String2”;您在内存LOC789中创建了一个新位置,该位置的String值为“ String2”,并且名称变量现在已更改为指向LOC789.

假定会话对象仍指向LOC456并且对LOC789一无所知,则更新的“ String2”值未反映在会话中.

为了克服这个问题,您可以使用可编辑的StringBuffer(或StringBuilder).

标签:session-state,java,jsp
来源: https://codeday.me/bug/20191025/1929780.html