SessionBean方法传递的对象类型参数究竟是“值”还是“引用”
最近开始使用J2EE做项目。
平台选用的是JDK 1.5 + GlassFish + JSF
在JSF的ManagedBean中调用了EJB方法,传递参数是对象,但具体执行过程中并非引用传递...
例如有SessionBean如下:
-----------------------------------
@Stateless
public class TestSessionBean implements TestSessionRemote, TestSessionLocal {
@PersistenceContext(unitName="TEST-PU")
private EntityManager em;
public TestSessionBean () {
}
// 这个就是留给ManagedBean调用的方法
public void persist(TestEntityBean testEntityBean) {
// 在这个方法内,按一定规则生成了实体Bean的主键
testEntityBean.setId(123l); // 它是一个Long类型
// 在这个方法内,按一定规则记录了一些其它信息
testEntityBean.setDesc("写下了一些描述信息"); // 它是一个String
// 把这个testEntityBean写入数据库
em.persist(testEntityBean);
}
}
---------------------------
接着便出现了非常郁闷的问题,按理说Java在传递对象时候是“引用”的规则(准确点说其实是传递的地址),传入了一个testEntityBean之后,我在方法内部修改这个对象的值,在方法执行完成后,这些改动同样生效于外部——但事与愿违,我在SessionBean方法中对传入的对象进行任何修改都无法在外部生效,而写入数据库的结果却是函数内部修改过的内容...
莫非是SessionBean方法调用的时候,又是按值来传递对象的么?