什么是Java中的内联? final关键字和Inlining之间是否有任何关系?

时间:2014-06-24 08:50:26

标签: java

这是内联的一个例子吗?

final class Executive extends Manager
{  
    public raiseSalary(int byPercent)
    {  
        return salary;
    }
}

3 个答案:

答案 0 :(得分:3)

  

这是内联的一个例子吗?

不,不是。

  

最终关键字与内联之间是否有任何关系?

有点儿。阅读本文:

  

与许多提示的含义相反,方法被宣布为最终   无法通过编译器安全地内联,因为该方法可以   在运行时有一个非最终声明。

     

要了解原因,假设编译器查看类A和子类B,和   子类C并看到A中的最终方法,它将其内联到C.   但是在运行时,为A和B加载的版本是不同的   该方法在A中不是final,在B中重写。然后C使用   错误内联版本。

来自http://www.javaperformancetuning.com/tips/final.shtml

答案 1 :(得分:1)

不,它不是'内联' 内联是指编译器决定用函数体替换函数调用 请阅读此处以获取完整示例https://stackoverflow.com/a/3925068/3743987

答案 2 :(得分:0)

Java编译器没有内联最终的类或方法。您可以查看this文章。

据我所知,内联适用于原始常量语句。例如,Java编译器在编译阶段将所有出现的MY_NUMBER常量替换为10。因此,在运行时,Java不需要访问内存来读取MY_NUMBER的值。

private static final int MY_NUMBER = 10;