Java 向下投射usng包装器与基本体的比较

Java 向下投射usng包装器与基本体的比较,java,Java,鉴于: 我应该使用哪种转换方法: double x = 15d; 或: 两者的优点是什么?新的Doublex.intValue;虽然我没有什么可以支持的,但它的效率似乎要低一些。实际上,这两种方式都没有功能优势。然而,我发现intx更具可读性,这是一个显著的优势 但最重要的是,.我所知道的唯一区别是,在使用call.intValue返回整数值之前,执行第二个操作必须创建一个新的Double类对象 您提到的第一个方法不必在返回整数值之前创建新对象 这就是我个人使用第一个的原因: int val

鉴于:

我应该使用哪种转换方法:

double x = 15d;
或:

两者的优点是什么?

新的Doublex.intValue;虽然我没有什么可以支持的,但它的效率似乎要低一些。实际上,这两种方式都没有功能优势。然而,我发现intx更具可读性,这是一个显著的优势


但最重要的是,.

我所知道的唯一区别是,在使用call.intValue返回整数值之前,执行第二个操作必须创建一个新的Double类对象

您提到的第一个方法不必在返回整数值之前创建新对象

这就是我个人使用第一个的原因:

int val = new Double(x).intValue();

在功能上,它们是等价的,可以产生相同的结果。第二个是浪费,因为对象分配,可读性较差。没有理由使用它来支持int x


您也可以这样做:Integer.parseIntString.format%.0f,x,它也可以工作。仅仅因为你可以做一些事情,并不意味着你应该做。

我想说,除非你在关键的实时短内存应用程序上工作,否则不会有太大的影响。如果这是你的情况,那么使用前者。否则,使用你感觉更好的。IMO我会选择前者以简化代码。Double.intValue可能在内部使用int cast;只需使用formernew Double,它不会创建匿名对象,而是创建一个Double对象。不存储在变量中的对象叫什么?我总是把它叫做匿名对象,因为它没有名字。我并没有把它和匿名类定义混淆——这是一个不同的概念。它没有名字,因为它真的不需要名字。你不应该使用匿名,因为这是另一个名称,这很令人困惑。编辑我的答案。短语过早优化是所有邪恶的根源是过早优化。如果你要引用它,至少要引用整个引用,而不仅仅是精辟的部分。
int val = new Double(x).intValue();
int val = (int) x;