Java中的8中基本数据类型转换

说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。

重新温故了下原始数据类型,现在来解释下它们之间的转换关系。

自动类型转换

自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

如:

ini 复制代码
long l = 100;

int i = 200;

long ll = i;

具体自动转换如如下图所示。

实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。

自动转换也要小心数据溢出问题,看下面的例子。

ini 复制代码
int count = 100000000;

int price = 1999;

long totalPrice = count * price;

编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。

ini 复制代码
int count = 100000000;

int price = 1999;

long totalPrice = (long) count * price;

另外,向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换。

强制类型转换

强制类型转换我们再清楚不过了,即强制显示的把一个数据类型转换为另外一种数据类型。

如:

ini 复制代码
short s = 199;

int i = s;// 199

double d = 10.24;

long ll = (long) d;// 10

以上的转换结果都在我们的预期之内,属于正常的转换和丢失精度的情况,下面的例子就一样属于数据溢出的情况。

ini 复制代码
int ii = 300;

byte b = (byte)ii;

300 已经超出了 byte 类型表示的范围,所以会转换成一个毫无意义的数字。

类型提升

所谓类型提升就是指在多种不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升。

把上面的溢出的例子再改下。

ini 复制代码
long count = 100000000;

int price = 1999;

long totalPrice = price * count;

price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。

相关推荐
程序定小飞15 分钟前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring
攀小黑26 分钟前
基于若依-内容管理动态修改,通过路由字典配置动态管理
java·vue.js·spring boot·前端框架·ruoyi
青云交1 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
森语林溪1 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
dreams_dream2 小时前
Django序列化器
后端·python·django
懷淰メ2 小时前
python3GUI--短视频社交软件 By:Django+PyQt5(前后端分离项目)
后端·python·django·音视频·pyqt·抖音·前后端
郝开2 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
有意义2 小时前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
小猪咪piggy2 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀3 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring