有 Java 编程相关的问题?

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

Java:基元类型是否会影响性能?

使用强制转换将long值分配给int变量更快,还是使用long变量更快

还是在消耗更多内存和处理更多数据之间进行选择

下面是一个示例测试:

import java.time.Duration;
import java.time.Instant;

public class NanoTest {
    final int loop = 20000;

    public void testNoCasting() {
        long sum = 0;
        long time = System.currentTimeMillis();

        for (int i = 0; i < loop; i++) {
            sum += System.currentTimeMillis() - time;
        }

        System.out.println(sum);
    }

    public void testIntCasting() {
        int sum = 0;
        long time = System.currentTimeMillis();

        for (int i = 0; i < loop; i++) {
            sum += (int) (System.currentTimeMillis() - time);
        }

        System.out.println(sum);
    }

    public static void main(String[] args) {
        NanoTest nt = new NanoTest();

    Instant start = Instant.now();

        nt.testNoCasting(); // or nt.testIntCasting();

        Instant end = Instant.now();

        System.out.print("Duration: ");
        System.out.println(Duration.between(start, end).getNano());

    }
}

共 (1) 个答案

  1. # 1 楼答案

    从long到int的类型转换只会忽略前导的32位,因此它应该或多或少是免费的

    长(=64位)操作在32位CPU上更昂贵32位CPU需要两条机器指令来添加两个64位数字(其他操作可能需要更多)。在64位CPU上,CPU时间应该没有差别

    相反(从int到long)的(隐式)强制转换需要一个“sign extension”,这意味着高位由较小类型的最高位填充。因此,它实际上可能有一个(小的)成本,因为它不仅要忽略高位,而且需要将它们带入一个定义良好的状态