现在我正在阅读"开始Java EE 7".我想知道Java EE 7是一个很好的技术堆栈,它包括CDI,bean验证,Web层的JSF和其他规范.
所以我有一个问题:
如果存在Java EE 7,我为什么要研究Spring框架并涵盖Spring实现的所有功能?
在Java中,所有变量都按值传递.对于对象,这意味着我们传递对象的引用.我对以下情况感到困惑.假设我们有一个对象图.一个对象包含对另一个对象的字段引用,该对象引用了另一个对象,如:user.address.city.这里我们有类User的实例,该实例引用了类Address的实例,该类具有String - city类型的字段.现在假设我们有2个用户:
User bob = new User();
User mary = new User();
Run Code Online (Sandbox Code Playgroud)
假设对象'bob'引用了地址对象:
Address bobAddress = new Address();
bobAddress.setCity("New York");
bob.setAddress(bobAddress);
Run Code Online (Sandbox Code Playgroud)
让我们说玛丽和鲍勃开始住在一个房子里,他们有相同的地址,没问题:
mary.setAddress(bobAddress);
Run Code Online (Sandbox Code Playgroud)
现在,mary和bob引用了一个地址对象.但是有一天他们离婚和玛丽现在还有另一个地址:
mary.getAddress().setCity("Boston");
Run Code Online (Sandbox Code Playgroud)
在这里我们遇到了一个问题:Mary在她的地址中改变了一些内容,但她也更改了Bob的地址,因为他们共享相同的引用.
上面的所有文字都是我尝试以小规模描述一个大问题:当我在将该对象的引用设置为另一个实例之前创建一个对象的副本(克隆)时?是否存在某些规则或技术?我知道使用这些对象的不可变对象(例如String,Integer ...),我们根本不需要考虑这些问题,但如果我有可变对象怎么办呢.我应该如何表现?