有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在for循环中将大小设置为n

我在大学学习编程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) 个答案

  1. # 1 楼答案

    这是一个代码优化的示例。高级语言的编译器将自动添加此优化和其他类似优化。我对C编译还不太熟悉,不能说他们是否会自动添加这种优化。我建议您研究一下您使用的特定编译器,看看是否是这种情况

    如果你的教授注意到为什么这种方法对他如此重要,那将是一种仁慈。我可以告诉您,它不是Java等语言的惯用语言,并且会降低代码的可读性,因此我建议您不要使用这种做法,除非您能够证明它有明显的好处。他可能是想训练你在默认情况下做到这一点,因为一些低级语言不会自动处理这个问题,如果你说出于某种原因需要从API或数据库获取计数,那么获取计数可能会很昂贵

    编辑:评论中的指南针提出了一个很好的观点。如果您习惯于修改循环主体中的列表,那么如果您不提前指定循环终止符,那么您将度过一段不愉快的时光。不过,在依赖于列表的循环中修改列表的大小通常不是一个好主意

  2. # 2 楼答案

    在Java中,您通常引用一些预先计算的字段,如arr.lengthstr.length()list.size()。将它们存储在变量中的好处是微不足道的,如果有帮助的话,JIT编译器可能会自动完成。但是如果你能证明在some particular case方面有显著的改进,那就千方百计去做吧

  3. # 3 楼答案

    数组的length属性保存为public final field,如10.7 Array Member中所述

    The public final field length, which contains the number of components of the array. length may be positive or zero.

    对对象字段的正常访问是通过getfield指令进行的,但为了获得数组长度,Java为其提供了一条特殊指令^{}

    All arrays have associated lengths, which are accessed via the arraylength instruction.

    所以对array.length的访问是直接的,与对局部变量的访问没有什么不同