HttpSession session=request.getSession();
SB st=(SB)session.getAttribute("stu");
st.setM(request.getParameter("m"));
session.removeAttribute("stu");代码作用是先通过session中属性stu(即一个SB对象,里面定义了valueUnbound方法)的setM方法更新这个属性,在属性通过removeAttribute方法激活属性的valueUnbound方法更新数据源。
问题是这里:
SB st=(SB)session.getAttribute("stu");
st.setM(request.getParameter("m"));
是把stu属性赋值给一个新的SB对象st,再用st的setM方法更新,这样的话应该只是对象st用setM方法更新了,而会话属性stu并没有更新到,stu更新数据源时也应该没有变化才对,而事实上st的setM方法却作用到stu属性上了,为什么呢?
我觉得正确的代码应该是:
((SB)session.getAttribute("stu")).setM(request.getParameter("m"));
不是这样才会真正作用于属性stu上么??

解决方案 »

  1.   

    就例如执行A=B;后删除A应该对B没有任何影响才对呀!
      

  2.   

    ....怎么可能不变呢???SB st=(SB)session.getAttribute("stu");  这个是声明一个SB类的对象st,指向的是session.getAttrbute("stu")这个对象,这个是引用类型调用的问题,对象名和真实的对象是两回事,不同的对象名,可以指向同一个对象的,我的理解是这样的,毕竟不是值类型。。 
      

  3.   

    这是引用传递。LZ应该好好看一下《thinking in java》。