日期:2014-05-17  浏览次数:20683 次

setAttribute(“name”,value)的问题
setAttribute(“name”,value)为什么同一作用域下,setAttribute之后再改变value的值。跳转后为什么会拿到改变后的value(改变了的value的property)?
经测试,在setAttribute后改变value,跳转后将不会改变。可是如果value是一个bean,有一个property的话(例如set入person,person这个bean有个name性质的时候)在setAttribute后,跳转前,如果改变其property(name)的值,最后取出的竟然是。。。改变了的。。property(name)。。。有没大神知道怎么回事。。。

------解决方案--------------------
引用:
((Person)request.get……

搞清楚上面所说的那种问题是,楼主需要先知道:java中的对象创建时,传递给变量的是地址的值,变量只是对对象进行引用。
当调用request.setAttribute("name",Object obj);方法时,第二个参数传递进去的是对对象的引用。
1)传递Person对象进去时,当属性设置后再次调用Person的setName()时,由于该变量任然有对该Person对象的引用,所以属性中的值也会改变。
2)传递String对象时,当属性设置后重新给变量赋值新的地址引用,所以不会对原地址引用的对象产生影响。
强调一下:java的地址操作不同于c语言的地址操作,楼主需要明白这一点。
------解决方案--------------------
楼主,对象的传递是引用