创建一个与字符串常量池

时间:2016-12-13 05:08:09

标签: java string

我正在阅读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分配新值,并且收到了错误消息:"无法为最终变量赋值。"我调查了这个问题并意识到我无法通过重新定位来改变参考。此外,如果我将对象名称作为参数传递,那么我只会更改形式参数的引用,而不是原始对象。简而言之,我的问题如下:

  • 如何在自己调用的方法中更改对象的引用(非静态)。
  • 你如何使一个对象在内存存储方面表现得像一个字符串(一般描述是完美的。我明白我的尝试并没有接近我并不是要求代码写入我,只是一般指南将不胜感激。)

0 个答案:

没有答案