当前位置: 首页 > 面试题库 >

Java Double与Double:类类型与原始类型

张溪叠
2023-03-14
问题内容

我很好奇Java的类和double的原始类型之间的性能差异是什么。因此,我创建了一个基准测试,发现类类型比原始类型慢3到7倍。(在本地计算机OSX上为3x,在ideone上为7x)

这是测试:

class Main {
    public static void main(String args[]) {
        long bigDTime, littleDTime;

        {
            long start = System.nanoTime();
            Double d = 0.0;
            for (Double i = 0.0; i < 1432143.341; i += 0.1) {
                d += i;
            }
            long end = System.nanoTime();
            bigDTime = end - start;
            System.out.println(bigDTime);
        }

        {
            long start = System.nanoTime();
            double d = 0.0;
            for (double i = 0.0; i < 1432143.341; i += 0.1) {
                d += i;
            }
            long end = System.nanoTime();
            littleDTime = end - start;
            System.out.println(littleDTime);
        }

        System.out.println("D/d = " + (bigDTime / littleDTime));
    }
}

http://ideone.com/fDizDu

那么为什么Double类型要慢得多呢?为什么还要实施它以允许数学运算符?


问题答案:

那么为什么Double类型要慢得多呢?

因为该值包装在需要分配,释放,内存管理以及getter和setter的对象中

为什么还要实施它以允许数学运算符

因为autobox旨在允许您使用此类包装,而不必担心它们不是纯值。您是否希望不能拥有ArrayList<Double>?性能 并非总是
必要的,根据情况将性能降低3-7倍是可以接受的。优化是不总是存在的要求。

在每种情况下都是如此,LinkedList对随机访问元素使用a
可能会过大,但这并不意味着完全LinkedList不应实施。这都不意味着对很少的随机访问使用链表会极大地影响性能。

最后一点 :基准测试之前,应先让虚拟机预热。



 类似资料:
  • 问题内容: 我想对原始类型和引用类型之间的Java中的isAssignableFrom行为有一个更好的了解。 例如: 我知道在分配基元<->引用时会根据需要进行装箱/拆箱,但是我想过,因此isAssignableFrom在上面的前两个示例中将返回true。 有人可以解释为什么它返回false,这里合适的测试是什么? 问题答案: 您 实际上 不能为变量分配值-但可以使用自动装箱从 转换为。 该Jav

  • 问题内容: 考虑以下方法: 和 这两种方法有什么区别?如果没有差异,为什么要使用第二个? 问题答案: 不允许您在列表中添加对象。请参阅下面的程序。这是我们传递给method的特定列表类型。 特定方式,列表是使用特定类型创建的,并传递给method 。不要与 单词 混淆。 具体可以是任何普通对象,例如Dog,Tiger,String,Object,HashMap,File,Integer,Long

  • 如果类型参数在创建期间传递了npt,则原始类型是泛型类或接口的对象。 以下示例将展示上述概念。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 GenericsTester.java package com.wenjiangs; public class GenericsTester { public static void main(String[] args) {

  • 由于Solidity是一个静态类型的语言,所以编译时需明确指定变量的类型(包括本地变量或状态变量),Solidity编程语言提供了一些基本类型(elementary types)可以用来组合成复杂类型。 类型可以与不同运算符组合,支持表达式运算,你可以通过表达式的执行顺序(Order of Evaluation of Expressions)来了解执行顺序。 值类型(Value Type) 值类型

  • 问题内容: 这是hrert的问题Generic类与其他类型的Collectiongetter的后续文章。如果您可以为我的问题找到更好的标题,请随时对其进行编辑: 下面的代码包含一个具有返回类型方法的通用类和具有返回类型方法的另一个方法,显然与。 现在,如果我实例化一个原始数据(我永远不会做,所以这个问题更多是一个理论问题,以帮助理解正在发生的事情),那么在增强的for循环中调用该方法将不起作用,因

  • 问题内容: 这是课程: 现在,我试图从类中“反射”此方法: 问题答案: 只有一个。 另一种选择是。 其他原语也是如此。