我在大学学习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做这件事太
答案 0 :(得分:2)
在Java中,您通常会引用一些预先计算的字段,例如arr.length
,str.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
的访问是直接的,与访问本地变量