栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java类型转换问题梳理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java类型转换问题梳理

类型转换在运算当中是一个容易忽视的问题,此内容仅作日常记录

1、低-----》高,自动转换

2、高-----》低,强制转换

自动转换不多赘述,而由高到低的强制转换如果不注意可能会出现问题,通常操作都是在类型前加上:(强制转换类型)

例如:

double a=10.0
int b=(int)a;

如果不加(int),程序编译时会报错,这就是强制转换问题,到这里对java基本了解的都会明白。但在日常计算中,不仅存在高转低,同样存在低转高,而前文提到低转高是自动进行的,那么我们不需要注意了么?不是的,我们看一下以下例子:

int a=1000000000;//10亿
int b=10;
int c=a*b;
System.out.println(c);//1410065408
long d=a*b;
System.out.println(d);//1410065408

此时,d=a*b是没有进行向上的自动转换的!

ps:此问题本质是内存溢出问题,了解内存溢出的人能一眼看懂原因,我尝试使用通俗释义解释。

解析:

我们都知道int类型范围值是:-2147483648到+-2147483648【正负20亿之间】,那么无论是变量a亦或是变量b都未超出此范围,但运算结果c为100亿,超出此范围,所以未输出正确结果。

那么为何运算结果d仍会出现同样结果呢?此时我们要知道:java中“=”的含义,通俗说,是将=右侧的值赋予左侧,a*b运算时仍是int类型,也就是在赋值前就已经出现内存溢出问题,因此转换是不成功的!

解决:

此类运算要在运算结果赋值前进行转换,d=a*((long)b),方可显示正确结果!

引申:

1、有时运算过程需要手动转换(通常是向上转换),需注意;

2、清晰明了“=”的含义,与数学运算方式含义不同!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号