gpt4 book ai didi

java - javac 是否预先计算固定表达式?

转载 作者:行者123 更新时间:2023-12-01 06:42:50 24 4
gpt4 key购买 nike

是否为此类变量声明提供了优化:

final int secondsInDay = 24 * 60 * 60;

尽管根本没有使用 additional_funct,但 C++ 上的这段代码甚至无法编译:

#include <iostream>

void additional_funct(int num);


void main()
{
std::cout << "just a text";
}


void additional_funct(int num)
{
// For both lines will be shown "divide by zero"
int var = 5 / 0;
int another_var = num + (2 / 0);
}

这证明C++编译器对数字文字表达式进行了优化,在运行之前预先计算它们。而相同的 Java 代码将简单地开始运行:

package experimental_main;

public class Experimental_start {
public static void main(String[] args) {
// Will throw ArithmeticException "by zero"
additionalMethod(2);
System.out.println("just a text");
}


static void additionalMethod(int num) {
int var = 5 / 0;
int anotherVar = num + (2 / 0);
}
}

据我了解,javac 不编译 C 语言含义的代码。但也许它以其他方式提供优化,或者最好以这种方式声明此类数字文字:

// 24 * 60 * 60
final int secondsInDay = 86_400;

最佳答案

虽然javac没有做任何重大优化,但这样的表达式可以在javac级别进行计算,

如果反编译表达式 int SecondsInDay = 24 * 60 * 60; 你会得到类似的内容

public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=2, args_size=1
0: ldc #2 // int 86400
2: istore_1
3: return
LineNumberTable:
line 7: 0
line 9: 3

并且#2驻留在常量池中,

Constant pool:
...
#2 = Integer 86400

如您所见,表达式的计算结果为它的值86400

关于java - javac 是否预先计算固定表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com