2013-11-15 111 views
1

我现在正在学习Java,但我遇到了一个问题。 我想让它每次运行我的代码时都会向字符串中添加一个字符。每次运行代码时都会在字符串中添加一个字符

这是我在这一刻:

StringBuilder amountReady = new StringBuilder(); 
amountReady.append("|"); 

但是当我运行第二次这样的代码,它忘记了所有关于第一个“|”,只是开始了一个“|”而不是两个。

由于提前,

〜里克

+2

您每次创建一个新对象。 –

+2

此外,“每次运行我的代码”时,是指一个程序中的多个方法调用,还是一个程序的多个运行?其中一个比另一个容易得多。 –

回答

4

你设置你的amountReadynew StringBuilder()对象运行此代码,您的每一次。 A new默认情况下,StringBuilder为空。

取而代之的是,将行:StringBuilder amountReady = new StringBuilder();添加到它的方法之外......这样,amountReady变量将已经存在,并且您可以像附加到它那样。

+0

不,你可能不应该那样做,因为'StringBuilder'不是线程安全的。如果线程安全性可能受到影响,请改用'StringBuffer'。 –

+0

@MartinAndersson嗯,听起来OP是Java相对较新的,所以程序可能会是单线程的。不过要注意一点。 –

+0

他没有提到线程,只是将'StringBuilder'放在类头中并不会固有地使其非线程安全。 – SnakeDoc

0

每当您使用保留字“新”,您正在创建一个新的对象。每次执行上面的代码时,都会创建一个新对象(以便可以存储在amountReady中的旧对象从内存中取消分配)并使其存储一个单个字符。

如果你的问题是关于如果你执行一个Java应用程序对象时,是否仍旧在内存中,那么答案绝对不是。

0

如果必须在程序的各个运行之间保留,则需要将它写出到文件或数据库中,并且每次都将其读回。

一个文件对于像这样的小练习来说肯定会更容易。 Java对文件系统有很好的支持。谷歌的“java文件”,并看看。这很容易实现,并且在Stack Overflow上有很多例子。

0

http://ideone.com/XjHKwb检查此;你可能不需要一个方法作为appendString;您可以将整个代码添加到主要方法中。我们可以删除静态等,我只是提供一个有用的想法。

private static StringBuilder amountReady = new StringBuilder(); 
public static String appendString(String str) 
{ 
    amountReady.append(str); 
    return amountReady.toString(); 
} 
public static void main (String[] args) throws java.lang.Exception 
{ 
    for(int i=0; i<10; i++) 
    System.out.println(appendString("|")); 
} 
+0

你永远不应该添加'抛出异常'方法。你能提一个在Java中没有的方法吗?事实上,你没有增加任何价值。但是你所做的是有效地销毁你的IDE必须通知你的方法中的代码抛出的未处理的异常。这条规则只有一个例外:如果我告诉你的是你想要的。例如,如果你编写一个期望抛出异常的单元测试方法,可能就是这种情况。 –

相关问题