java变量上的操作是在编译时还是运行时被声明为最终计算的?

java变量上的操作是在编译时还是运行时被声明为最终计算的?,java,Java,我想知道什么时候用java进行这样的计算: float x; if (x/2f>10f) {} 它是否必须在每次运行时进行除法,还是在编译阶段使用正确的值将其内联 我猜是后者,因为x的值可以改变?我说得通吗?我想知道我是否值得花时间预先计算某些值,而不是重复它们,或者我是否已经这样做了 正如你所知道的,我没有接受过任何编程方面的正规教育,我只是好奇而已 如果我使用内联这个词不正确,请原谅,因为我已经很久没有尝试过C了 编辑:谢谢你的回复,这对我来说似乎很明显,而且我觉得问这个问题很傻,如

我想知道什么时候用java进行这样的计算:

float x;
if (x/2f>10f) {}
它是否必须在每次运行时进行除法,还是在编译阶段使用正确的值将其内联

我猜是后者,因为x的值可以改变?我说得通吗?我想知道我是否值得花时间预先计算某些值,而不是重复它们,或者我是否已经这样做了

正如你所知道的,我没有接受过任何编程方面的正规教育,我只是好奇而已

如果我使用内联这个词不正确,请原谅,因为我已经很久没有尝试过C了

编辑:谢谢你的回复,这对我来说似乎很明显,而且我觉得问这个问题很傻,如果x的值是变量,那么它不可能是编译时的,但是如果它被初始化并声明为final呢?因为我读到对文本的操作是编译时的,所以常量呢…所以

最终浮点数x=1f;
如果(x/2f>10f){}

在您提供的代码中,假设它在一个方法中,“x”未初始化,则在编译阶段检查此步骤,计算在运行时完成。

因为“x”未初始化。计算将在运行时完成。

这将始终在运行时进行计算。编译器可能知道您没有将任何内容设置为x。因此if语句将始终为true,因此内联true?可能的重复项需要提供比该代码段更多的上下文,因为从表面上看,该代码段会导致编译错误,因为x未初始化。这将导致编译错误,因为
x
未初始化。但是假设它有一个固定的值,您不会将其从日化更改为
if
保护。编译器将优化您的代码,因为如果值
x
不变,您没有任何理由对其进行多次求值。您的答案不正确,因为编译器将尝试在编译时,如果表达式中的值不随时间变化,则对其进行优化。