加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 推理后面必须指定L为long,F,D为float,double

发布时间:2020-12-14 16:45:45 所属栏目:Java 来源:网络整理
导读:这里有几个相关问题. 根据标题,为什么要指定变量类型为long或float,double?编译器不会评估变量类型吗? Java认为所有的整数文字都是int – 这是为了减少无意的内存浪费的打击吗?所有浮点文字为双倍,以确保最高精度? 解决方法 当你有一个常数时,看起来一样
这里有几个相关问题.

根据标题,为什么要指定变量类型为long或float,double?编译器不会评估变量类型吗?

Java认为所有的整数文字都是int – 这是为了减少无意的内存浪费的打击吗?所有浮点文字为双倍,以确保最高精度?

解决方法

当你有一个常数时,看起来一样,但不是的值之间有微妙的差异.另外,由于引入了自动装箱功能,所以您得到的结果与此不尽相同.

考虑一下,如果将0.1乘以0.1作为浮点数或双倍值,并将其转换为浮点数,则可以获得该值.

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

现在比较你使用float或int来执行一个计算得到的结果.

float a = 33333333f - 22222111f;
float b = 33333333 - 22222111;
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

比较int和long

long a = 33333333 * 22222111; // overflows
long b = 33333333L * 22222111L;
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

比较双倍长

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

总而言之,与使用其他类型相比,使用int,long,double或float可能会产生不同的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读