【发布时间】:2017-03-04 00:26:01
【问题描述】:
假设我有一个包含列 {item, quantity} 的数组。我从 sql 表中获取这些值,然后按项目对它们进行排序。我正在使用临时变量“数量”来操纵双精度值:
while(rs.next()){
item = rs.getString(1);
for(int i = 0 ; i < array.size ; i++){
if(item.equals(array[i][0]){
double quantity = rs.getDouble(2);
quantity = quantity + Double.parseDouble(array[i][1]);
array[i][1] = quantity;
}
}
//add code for adding items if not found in array
}
我的问题是在迭代数组时使用这个临时变量会更慢/创建垃圾吗? Java 是否在 if 语句的末尾正确地处理了这个变量?我之所以这么问,是因为我遇到了堆空间问题,而且我不想重写所有内容来适应这个问题。
我的另一个选择是:
if(item.equals(array[i][0]){
array[i][1] = String.valueOf(Double.parseDouble(array[i][1]) + rs.getDouble(2));
}
感谢阅读
【问题讨论】:
-
一个变量不会产生垃圾,也不会变慢。它可能会澄清代码,尤其是在您的情况下,因为该值未命名,因此在这种情况下,名为
quantity的变量更好。我的意思是,看看你的第二个例子。关于正在发生的事情是非常无信息的。评论可能会有所帮助,但命名良好的变量也是如此。 --- 仅供参考:您的第一个示例缺少String.valueOf()调用。 -
说“一个原语变量不会产生垃圾”可能更准确。作为对象的变量将在堆上分配其内存,并且需要进行垃圾回收。
-
@mangotang 不正确。引用变量将引用堆上的一个对象,但该对象不会通过分配给该变量来创建。变量可能只是引用堆上已经存在的对象,所以使用变量不会改变任何东西。
-
@Andreas,我试图避免第二个例子,因为它看起来更混乱;不过,您对第一个示例中的 String.valueOf() 调用是正确的。
标签: java variables garbage-collection heap-memory temporary