Java Core:变量值变量的数据类型

时间:2014-08-28 12:07:02

标签: java string data-structures

这是一个有点不成熟的问题,但是说我有一个变量在循环中不断重新初始化,暂时存储这些数据的最佳数据类型是什么?

例如:

String value = "";
while(file.hasNext()){
   value = file.readLine();
}

我问的原因是我知道字符串是不可变的,这表明有一个更有效的选择,我是对的吗?

2 个答案:

答案 0 :(得分:3)

  

我问的原因是我知道字符串是不可变的,这表明有更有效的选择,我是对的吗?

不。您多次拨打readLine,每次都会给您一个不同的字符串引用。仅仅因为字符串内容本身无法更改并不意味着更改String 变量的值效率不高。该变量值只是一个参考...它并不像它会在每次迭代中复制字符串内容。

你甚至需要在循环中声明变量吗?通常,我更喜欢用尽可能窄的范围声明变量:

while (file.hasNext()) {
    String line = file.readLine();
    // Use line here
}

答案 1 :(得分:2)

在这种情况下,最好的办法是在while循环中逐行进行所有计算,即

String value;
while(file.hasNext()) {
    value = file.readLine();
    //do your thing on value
    //or store data in an appropriate structure
}

如果您确实需要包含整个文件的字符串,并且在阅读时无法获取数据,那么最好使用的是StringBuilder,请参阅documentation

在你的情况下,它会给出:

StringBuilder sb = new StringBuilder();
while(file.hasNext()) {
    sb.append(file.readLine());
}
String entireFile = sb.toString();