当前位置: 首页 > 知识库问答 >
问题:

为什么我的数据类型没有自动提升为Double

欧君之
2023-03-14

我知道一个数据类型会自动提升到更高的数据类型byte-short-int

class Temp {
    void check(byte x) {
        System.out.println(x + " is the byte type");
    }

    void check(short x) {
        System.out.println(x + " is the short type");
    }

    void check(int x) {
        System.out.println(x + " is the int type");
        int y = x;
        System.out.println(y + " is the int type");
    }

    void check(long x) {
        System.out.println(x + " is the long type");
    }

    void check(float x) {
        System.out.println(x + " is the float type");
    }

    void check(double x) {
        System.out.println(x + " is the double type");
    }

    public static void main(String args[]) {
        byte b = 42;
        char c = 'a';
        short s = 1024;
        int i = 50000;
        float f = 5.67f;
        double d = .1234;
        double result = (f * b) + (i / c) - (d * s);
        System.out.println((f * b) + " + " + (i / c) + " - " + (d * s));
        System.out.println("result =" + result);
        Temp t = new Temp();
        t.check(f * b);
        t.check(i / c);
        t.check(d * s);
        t.check(b + b);
        t.check(b * b);
        t.check(b * b * b);
        t.check(b * b * b * b * b * b * b * b * b);
        t.check(b * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b
                * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b);
        t.check(b * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b
                * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b
                * b * b * b * b * b);

    }
}
238.14 + 515 - 126.3616
result =626.7784146484375
238.14 is the float type
515 is the int type
515 is the int type
126.3616 is the double type
84 is the int type
84 is the int type
1764 is the int type
1764 is the int type
74088 is the int type
74088 is the int type
-1889539584 is the int type
-1889539584 is the int type
-2147483648 is the int type
-2147483648 is the int type
0 is the int type
0 is the int type
t.check(b * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b
                * b * b * b * b * b * b * b * b * b * b * b * b * b * b * b);

共有1个答案

闻人梓
2023-03-14

我的问题是为什么b*b升级为int

因为这就是语言规范所说的。

为什么[...]这条线得了0为什么不升到那个双倍

对操作数执行二进制数字提升(§5.6.2)。

二进制数字提升(5.6.2)将把byte操作数提升为int,因此在代码中的所有情况下,都使用int*int算术。在第一种情况下,您有byte*byte,因此两个操作数都被提升为int;对于长行,您有一个字节*byte,其余的是int*byte,其中只有第二个操作数被提升为int。这个选择是在编译时做出的,与执行时的值无关--JVM不会决定将值提升为double,因为它们溢出了int的边界。

 类似资料:
  • 问题内容: 我正在建模黎曼θ函数: 它对否定无效; 例如导致此错误: 为什么?应该只是如果我正确地记得我的数学。 问题答案: 在NumPy中,用于选择类似操作的输出dtype的逻辑基于dtype,而不是值。这意味着必须具有与相同的输出dtype 。 给出整数输出之类的东西很重要,这意味着必须给出整数或什么都不给出。他们什么也没捡。将整数提高为负整数幂是NumPy中的错误。 如果要浮点输出,请进行浮

  • 问题内容: 我认为你不能将Java泛型类型参数绑定到下限(即使用关键字)。我正在阅读Angelika Langer泛型常见问题解答对此主题的看法。他们说,这基本上可以归结为无用的下限(“没有任何意义”)。 我不相信。我可以想象它们的用途是帮助你更灵活地调用产生类型化结果的库方法的调用者。想象一下一个方法,该方法创建了用户指定大小的数组列表,并用空字符串填充了该列表。一个简单的声明是 但这不必要地限

  • 问题内容: 具体来说,在关系数据库管理系统中,为什么我们在创建时需要知道列的数据类型(更可能是对象的属性)? 对我来说,数据类型感觉就像是一种优化,因为可以以多种方式实现一个数据点。将语义角色和约束分配给数据点,然后让引擎在内部检查和优化哪种数据类型最能为用户服务会更好吗? 我怀疑这是繁重的工作,为什么只问用户而不是做工作就更容易了。 你怎么认为?我们要去哪里?这是现实的期望吗?还是我有一个错误的

  • 问题内容: 为什么大多数其他数据类型都没有Java的String基本类型? 问题答案: 字符串是一个对象,根本不是原始类型,只是一个字符数组。James Gosling的访谈 摘录摘述了Java中根本存在原始类型的原因,这很有趣。 Bill Venners: Java为什么会有原始类型?为什么不是所有事物都只是一个对象? James Gosling: 完全是效率问题。有各种各样的人已经建立了以in

  • 问题内容: 为什么不自动生成?我在应用程序服务器上遇到了一个问题,该服务器显然正在缓存一个旧类。 问题答案: 不会自动生成serialversionuid,因为它很危险。设置serialversionuid时,表示类的两个版本在序列化方面兼容。 假设您有一个名为Foo的类,并且它 没有serialversionuid (默认值),并且将Foo的实例序列化为文件。稍后,您将一些新成员添加到Foo类。

  • 问题内容: 我不明白为什么这会使编译器感到困惑。我正在使用泛型类型来保存与和方法无关的对象。我一直认为并且在功能上是相同的,但是我一定会误会。当上课的时候我得到了。这堂课符合我的期望。这里发生了什么? 问题答案: 关于原始类型是如何工作的(您已省略了参数的泛型类型)是,它们的 所有 泛型及其方法也将被删除。因此,对于raw ,和方法 也将 丢失其泛型。