Java 用于大型循环每次迭代的临时变量,字符串是不可变的,那么我应该使用什么呢?

Java 用于大型循环每次迭代的临时变量,字符串是不可变的,那么我应该使用什么呢?,java,Java,我有一个像这样的循环: String tmp; for(int x = 0; x < 1000000; x++) { // use temp temp = ""; // reset } 字符串tmp; 对于(int x=0;x

我有一个像这样的循环:

String tmp;

for(int x = 0; x < 1000000; x++) {


   // use temp


   temp = ""; // reset
}
字符串tmp;
对于(int x=0;x<1000000;x++){
//使用温度
temp=”“;//重置
}
此字符串最多可容纳10个字符

为这个用例创建变量最有效的方法是什么

我应该使用固定大小的数组吗?还是一个字符串缓冲区

我不想在不需要的时候创建一百万个变量,这对这个方法(性能)很重要

编辑
我简化了我的场景,实际上我需要这个变量位于类级别的作用域,因为有一些事件发生,即它不能在循环中声明。

使用固定数组有什么问题?我想数组就可以了。这是我发现的类似问题

嗯,
stringbuffer
StringBuilder
也可以。但是比stringBuffer快


如果它基于性能级别,我认为您可能需要检查提供更好性能的循环类型。

您希望使用
tmp
(或
temp
)做什么

老实说,如果以后不需要变量,我会尝试在循环中声明它们,并对其进行分析。由于编译器和Hotspot JVM中的优化和其他改进,许多过去用于帮助解决循环内性能问题的晦涩之处在最新版本的Java中不再需要了。

为什么不简单地在循环内声明
temp

for(int x = 0; x < 1000000; x++) {
    String temp;
    // use temp
}
for(int x=0;x<1000000;x++){
字符串温度;
//使用温度
}
您甚至可以获得非常(非常、非常)轻微的性能提升,因为您不必浪费时间将
temp
的值重置为
”。


关于您的更新,它仍然取决于您对
temp
所做的操作,但StringBuffer可能是最容易使用的。特别是如果你需要将一个Sting连接在一起,它会非常快。

答案实际上取决于你在循环中如何使用
temp

实例根据定义是不可变的。如果您的处理包括字符串操作,那么您不应该使用字符串,因为您最终将创建许多不必要的非常短暂的不可变实例。在这种情况下,请使用(或如果需要螺纹安全)

如果您只是在每次迭代中创建一个新字符串(或从外部源获取),并且使用它时没有任何创建新字符串对象的字符串操作,那么您可以使用字符串。请注意,每次迭代都创建一个新的字符串实例通常非常快,除非您的探查器明确指出这是一个问题,否则您不应该尝试过早地对此进行优化

另外,请注意,除非您在每次迭代中特别依赖于引用空字符串的
temp
初始值,否则无需执行
temp=“”
尝试此操作

公共类Robal{

public void looping()
{
    for(int x = 0; x < 1000000; x++) {
        String temp=x+"";
        System.out.println(temp);
           temp = ""; // reset
        }

}
public void循环()
{
对于(int x=0;x<1000000;x++){
字符串温度=x+“”;
系统输出打印项次(温度);
temp=”“;//重置
}
}

好吧,如果您与以前的值有关,我想您不能只在循环中声明变量。@在循环开始并重置为
之前立即声明所有的
temp
“”
在上一次迭代中,所以我怀疑它的值是在循环之前设置的,还是在循环之后使用的。它必须在对象级别范围内,很抱歉没有这样说。对于每个循环,我只是设置值,然后一路上与它进行比较。现在我甚至可以使用枚举。@code完成如果可以使用枚举,我会试试看。比较枚举中的两个值要比比较两个字符串快得多。(在确定两个字符串是否相等之前,您必须比较两个字符串中的每个字符,而不是比较两个枚举常量的值。)