首页 > 编程语言 > java数据类型转换问题

java数据类型转换问题

时间:2022-08-24 13:56:12浏览次数:70  
标签:类型转换 优先级 int 数据类型 内存 类型 java 数据

我们知道java中的各个数据类型的取值范围不同,可以理解成容量大小,而针对容量大小可以对他们进行一个由低到高的排序,也就是优先级。

优先级

低-----------------------------------------------------------------------高

(byte,short,char)=> int => long => float => double

类型之间的转换形式有两种,一种的是强制转换,另外一种是自动转换(也叫类型提升)。

强制类型转换

首先我们看,把优先级高的数据类型赋值给优先级低的数据类型是不被允许的。

在这里插入图片描述

这种情况我们要用到强制类型装转换,即在变量名前加上想要转换的类型即可。

在这里插入图片描述

但是强制类型转换可能会出现内存溢出,或者精度问题。如下:

在这里插入图片描述
在这里插入图片描述

我们可以看到打印结果是-24,并不是1000。因为byte类型的取值范围是-128 ~ 127,很显然1000已经远远大于了这个范围,所以导致结果内存溢出,结果并不是我们想要的。如果刚刚 i 的值没有超出byte的取值范围,则强制类型转换后不会出现刚刚的内存溢出情况,转换后的值不会变化。

自动类型转换

当我们把优先级小的数据类型赋给优先级大的数据类型则不用去进行类型转换,java会出现自动类型提升且不会存在内存溢出的问题。

在这里插入图片描述
在这里插入图片描述

类型转换与运算问题

我们来看一个例子

在这里插入图片描述
在这里插入图片描述

很显然打印的结果出现了问题,也就是说类型没有自动提升而导致内存溢出,结果不正常。

原因:

当int类型的x与int类型的y进行运算时,得到的值还是int类型,但是这个时候x*y的值已经超过了int类型的取值范围,所以x乘y的结果就已经是内存溢出,变成负数了。然后int类型赋值给long类型,自动类型转换,值不变。

解决办法:

只要在运算时将一个int类型转换为long类型,这样x与y在运算时会自动类型提升,变成两个long类型做运算。

在这里插入图片描述
在这里插入图片描述

可以看到,结果没有问题。

标签:类型转换,优先级,int,数据类型,内存,类型,java,数据
From: https://www.cnblogs.com/laomama/p/16619640.html

相关文章

  • oracle数据库性能监控常用sql
    因执行时间较长建议使用plsql等第三方工具执行--1.监控sga内存分配信息select*fromv$sgainfo;--2.监控每个用户的磁盘io及io命中率selectv$sess_io.*,(block_gets+con......
  • 04.Javascript学习笔记3
    1.箭头函数箭头函数是一种更短的函数表达式。constage=birthyear=>2022-birthyear;console.log(age(2000))箭头左边的birthyear是参数,箭头右边是要执行的代码......
  • angular ionic ts的数据不更新到html页面
    场景:在ts中更新了某个数据但是未刷新到html页面,该页面的上方放置的腾讯地图,下方放置需要更新数据的版块,该板块的数据未更新其他页面能正常更新原因:未知解决方法:在ts......
  • Seurat4.0单细胞数据分析 数据的归一化
     001、数据的归一化是在数据的标准化的基础上进行的,而且是按照行来进行的,即:(每一行的观测值-每一行的平均值)/每一行的标准差 验证: a、前期步骤参考:https://ww......
  • java生成sql文件
    java生成sql文件java生成sql文件场景场景用于清理数据库数据,生成sql语句脚本,方便DBA执行@RequestMapping("/cleanQuestion")@ResponseBodypub......
  • Spring Boot +Mybatis plus多数据源实践
    随着业务及客户的不断壮大,单数据库已经不足以支撑程序业务的完美运行(响应快、高吞吐),所以数据库往往都会进行分表分库/读写分离,那么问题来了,分库后程序如何从不同URL......
  • 产学研合作生态硬核来袭,共探数据库技术发展与应用
    腾讯云数据库一直致力于推动数据库基础研究创新、数据库产学研合作生态建设,助力国产数据库学术人才培养和技术创新生态建设发展。为让更多数据库从业者了解数据库领域的最......
  • Web编辑器粘贴图片自动上传到服务器(Java版)
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,......
  • Java工具篇之Disruptor高性能队列
    简介: disruptor适用于多个线程之间的消息队列,`作用与ArrayBlockingQueue有相似之处`,但是disruptor从功能、性能都远好于ArrayBlockingQueue,当多个线程之间传递大量数据或......
  • Linux mysql数据库自动备份脚本策略
    1.创建保存备份文件的文件夹mkdir/data/mysqlbak 2.编写脚本cd/data/mysqlbakvisqlAutoBak.sh SH脚本内容:DB_USER="root"DB_PASS="root"#你的数据库密码D......