我现在正在学习Java,但我遇到了一个问题。 我想让它每次运行我的代码时都会向字符串中添加一个字符。每次运行代码时都会在字符串中添加一个字符
这是我在这一刻:
StringBuilder amountReady = new StringBuilder();
amountReady.append("|");
但是当我运行第二次这样的代码,它忘记了所有关于第一个“|”,只是开始了一个“|”而不是两个。
由于提前,
〜里克
我现在正在学习Java,但我遇到了一个问题。 我想让它每次运行我的代码时都会向字符串中添加一个字符。每次运行代码时都会在字符串中添加一个字符
这是我在这一刻:
StringBuilder amountReady = new StringBuilder();
amountReady.append("|");
但是当我运行第二次这样的代码,它忘记了所有关于第一个“|”,只是开始了一个“|”而不是两个。
由于提前,
〜里克
你设置你的amountReady
为new StringBuilder()
对象运行此代码,您的每一次。 A new
默认情况下,StringBuilder为空。
取而代之的是,将行:StringBuilder amountReady = new StringBuilder();
添加到它的方法之外......这样,amountReady
变量将已经存在,并且您可以像附加到它那样。
不,你可能不应该那样做,因为'StringBuilder'不是线程安全的。如果线程安全性可能受到影响,请改用'StringBuffer'。 –
@MartinAndersson嗯,听起来OP是Java相对较新的,所以程序可能会是单线程的。不过要注意一点。 –
他没有提到线程,只是将'StringBuilder'放在类头中并不会固有地使其非线程安全。 – SnakeDoc
每当您使用保留字“新”,您正在创建一个新的对象。每次执行上面的代码时,都会创建一个新对象(以便可以存储在amountReady中的旧对象从内存中取消分配)并使其存储一个单个字符。
如果你的问题是关于如果你执行一个Java应用程序对象时,是否仍旧在内存中,那么答案绝对不是。
如果必须在程序的各个运行之间保留,则需要将它写出到文件或数据库中,并且每次都将其读回。
一个文件对于像这样的小练习来说肯定会更容易。 Java对文件系统有很好的支持。谷歌的“java文件”,并看看。这很容易实现,并且在Stack Overflow上有很多例子。
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("|"));
}
你永远不应该添加'抛出异常'方法。你能提一个在Java中没有的方法吗?事实上,你没有增加任何价值。但是你所做的是有效地销毁你的IDE必须通知你的方法中的代码抛出的未处理的异常。这条规则只有一个例外:如果我告诉你的是你想要的。例如,如果你编写一个期望抛出异常的单元测试方法,可能就是这种情况。 –
您每次创建一个新对象。 –
此外,“每次运行我的代码”时,是指一个程序中的多个方法调用,还是一个程序的多个运行?其中一个比另一个容易得多。 –