在for循环中将size设置为n

时间:2018-05-23 20:20:55

标签: java for-loop strlen

我在大学学习C课程约4个月。

在C中,它是一种"规则"始终在for循环中设置等于n的大小(长度)。我将在下面的示例中显示。

for(int i = 0, n = strlen(x); i < n; i++) {

在java中,我从未见过有人设置arraylist / character sequence / etc的长度/大小。等于n和那么有条件。 如果我们一直没做这样的话,我们总会得到1分或类似的东西。它更好,因为计算机不必一遍又一遍地搜索长度(每次迭代)。

为什么人们不会在java中使用它?这有什么理由吗?这样做不够重要吗?

编辑:我已经看到C中没有多少人这样做..无论如何,我已经像这样学到了这一点而且我一直用Java做这件事太

3 个答案:

答案 0 :(得分:2)

在Java中,您通常会引用一些预先计算的字段,例如arr.lengthstr.length()list.size()。将它们存储在变量中的好处是微不足道的,如果它有帮助,JIT编译器可能会自动执行它。但如果你能证明some particular case有显着改善,那么一定要继续。

答案 1 :(得分:2)

这是代码优化的一个例子。高级语言&#39;编译器会自动添加此优化和其他类似的优化。我对C编译不太熟悉,说他们是否通常会自动添加此优化。我建议研究您使用的特定编译器,以确定是否属于这种情况。

你的教授应该注意为什么这种方法对他来说如此重要。我可以告诉你,它不是像Java这样的语言的惯用语,并且使你的代码可读性降低,所以除非你能证明明显的好处,否则我建议不要这样做。一些默认情况下,他可能会尝试训练你这样做,因为一些较低级别的语言不会自动处理这个问题,如果你需要从一个API或数据库获取计数,那么获得计数可能会很昂贵原因。

编辑:评论中的指南针是一个很好的观点。如果您习惯于修改列表中的内容,那么如果您没有提前分配循环终止符,那么您将会遇到糟糕的时间。尽管如此,修改依赖于该列表的循环内的列表大小通常不是一个好主意。

答案 2 :(得分:0)

数组的长度属性保存为10.7 Array Member

中所述的public final field
  

public final field length,其中包含组件数   数组。长度可以是正数或零。

对象字段的正常访问是通过getfield指令,但为了获得数组长度,Java为它提供了一个特殊的指令arraylength

  

所有数组都有相关的长度,可以通过   arraylength指令。

因此,对array.length的访问是直接的,与访问本地变量

没有区别