gpt4 book ai didi

java - 必须指定 L 表示 long、F、D 表示 float、double 的原因

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:33 29 4
gpt4 key购买 nike

这里有几个相关的问题。

根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗?

Java 将所有整型文字视为 int - 这是为了减轻无意内存浪费的影响吗?所有浮点文字都是double - 以确保最高精度?

最佳答案

当你有一个常量时,看起来相同但实际上不同的值之间存在细微差别。此外,由于引入了自动装箱,您会得到与 less 截然不同的结果。

考虑将 0.1 乘以 0.1 作为 float 或 double 并转换为 float 会得到什么。

float a = (float) (0.1 * 0.1);
float b = 0.1f * 0.1f;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

打印

a= 0.00999999977648258209228515625
b= 0.010000000707805156707763671875
a == b is false

现在比较使用 floatint 执行计算时得到的结果。

float a = 33333333f - 11111111f;
float b = 33333333 - 11111111;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

打印

a= 22222220
b= 22222222
a == b is false

比较intlong

long a = 33333333 * 11111111; // overflows
long b = 33333333L * 11111111L;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

打印

a= -1846840301
b= 370370362962963
a == b is false

比较 doublelong

double a = 333333333333333333L  / 333333333L;
double b = 333333333333333333D / 333333333D;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

打印

a= 1000000001
b= 1000000000.99999988079071044921875
a == b is false

总而言之,可以构造一种情况,其中使用 intlongdoublefloat 将产生与使用另一种类型相比,结果不同。

关于java - 必须指定 L 表示 long、F、D 表示 float、double 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522901/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com