Java是什么类型的(长a - 双b)

noa*_*mik 3 java

正如标题中所要求的那样:当从长值中减去一个double值时,内部会发生什么?结果来自double或long类型,这种行为甚至是在Java规范中指定的还是jvm特有的这种行为?

所以我知道我可以测试自己的jvm是做什么的:

    public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
        double b = 1000;
        long a = 1000;
        Object c = a - b;
        Class cls = c.getClass();  
        System.out.println("The type of the object is: " + cls.getName());
        }

    }
Run Code Online (Sandbox Code Playgroud)

输出:

    The type of the object is: java.lang.Double
Run Code Online (Sandbox Code Playgroud)

但这是指定的吗?或者它是否特定于我使用的jvm?

Kev*_*sox 6

以下是规范的适用部分:

4.2.4.浮点运算

如果数值运算符的至少一个操作数是double类型,则使用64位浮点运算执行运算,并且数值运算符的结果是double类型的值.如果另一个操作数不是double,则首先将其扩展(第5.1.5节)以通过数字提升(第5.6节)键入double.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.4