Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用直接算术表达式和在运行时将值传递给方法之间有什么区别吗?_Java_Algorithm_Performance_Runtime - Fatal编程技术网

Java 使用直接算术表达式和在运行时将值传递给方法之间有什么区别吗?

Java 使用直接算术表达式和在运行时将值传递给方法之间有什么区别吗?,java,algorithm,performance,runtime,Java,Algorithm,Performance,Runtime,运行时有什么不同吗? 如果有,为什么 int pairSumSequence(int n) { int sum = 0; for (int i = 0; i < n; i++){ sum += pairSum(i, i+1); } return sum; } int pairSum(int a, int b) { return a + b; } intpairsumsequence(intn){ 整数和=0; 对于(int i

运行时有什么不同吗? 如果有,为什么

int pairSumSequence(int n) { 
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += pairSum(i, i+1);
    }
    return sum;
}

int pairSum(int a, int b) {
    return a + b;
}
intpairsumsequence(intn){
整数和=0;
对于(int i=0;i
vs

intpairsumsequence(intn){
整数和=0;
对于(int i=0;i
谢谢大家!

运行时有什么不同吗

几乎看不到,这在很大程度上取决于可以进行的优化。编译器可以内联调用(使用与您相同的等效表达式替换它)。甚至JIT编译器也可以这样做

如果有,为什么

int pairSumSequence(int n) { 
    int sum = 0;
    for (int i = 0; i <  n; i++){
        sum += pairSum(i, i+1);
    }
    return sum;
}

int pairSum(int a, int b) {
    return a + b;
}
就像在现实生活中一样!当您计算第一个表单时,您必须跳转到函数,计算它,然后跳转回调用点:这需要时间,而机器只需要您。你必须付电话费。调用函数的成本不是很高,因此对于许多应用程序来说,它对性能没有严重影响;当然,如果你在某个可以改变的特定领域,可以把高计算量的任务想象成预测、模拟等


因此,总而言之,编写调用表单,这样可以分解代码,生成更可读的代码,等等。如果可能的话,让编译器进行优化(编译器现在非常智能)。我怀疑您是否需要自己对其进行优化。

在几乎所有情况下,都不需要;如果有任何区别,那是可以忽略不计的。JIT可以优化差异。选择你认为最可读的。你也可以使用
n*(n+1)-n
而不是循环。@Someprogrammerdude,你可能看不到任何差异,或者结果不正确。你可能知道,但你的评论可能有误。这应该有一点区别,因为您调用的新方法总是需要一些时间(方法堆栈),但是将代码拆分为许多小的逻辑方法有助于获得更干净的代码。测试小方法也更容易。谢谢大家!这些代码只是示例。我只是想知道,如果我调用一个新方法来编写更干净的代码,而不是将一堆代码放入循环中,在运行时是否会有巨大的差异。我想没关系then@user85421这适用于Java热点和/或Java遗留编译器。但是,如果你读到java编译器在某些情况下禁止内联函数调用,则没有任何规范。我不会在编译时将任何编译器排除在内联方法之外,因为很难支持所有必需的功能,就像13.4.22部分规范状态一样“仍然有可能在连接时提供该方法的新版本。此外,必须保留原始程序的结构,以便进行反思。”