我正在阅读Strings并阅读this文章。具体来说,这一节:
随着应用程序的增长,String文字占据大量程序的内存是非常常见的,并且在一个程序的字符串文字的范围内通常有很多冗余。为了提高Java的内存效率,JVM预留了一个特殊的内存区域,称为" String常量池。"当编译器遇到String文本时,它会检查池以查看是否已存在相同的String。如果找到匹配项,则对新文本的引用将定向到现有String,并且不会创建新的String文本对象。
我想知道是否有可能创建一个具有类似行为的对象,它会检查是否存在与其等效的另一个对象,然后引用现有数据。我尝试使用银行帐户系统对此进行建模。用户可以创建仅具有帐号作为实例数据的银行帐户。如果帐号已经存在,它将分配对象以引用预先存在的对象,而不是创建新对象。我最初的想法是使用静态数组来保存所有对象,调用构造函数中的每个对象,然后比较它们的帐号以确定它们是否是重复的。但是,在我进入那个阶段之前,我意识到我无法在该对象的方法中重新分配对象引用:
public class BankAccount
{
int accountNumber;
String name;
BankAccount previousAccount; //instead of an array, I first tested with one value
BankAccount currentAccount;
BankAccount(int actNum){
currentAccount = this;
if(actNum == previousAccount.getAccountNumber())
this = currentAccount;
}
public int getAccountNumber(){
return accountNumber;
}
}
我的具体问题是我无法为this
分配新值,并且收到了错误消息:"无法为最终变量赋值。"我调查了这个问题并意识到我无法通过重新定位来改变参考。此外,如果我将对象名称作为参数传递,那么我只会更改形式参数的引用,而不是原始对象。简而言之,我的问题如下: