首页 > 编程语言 >JAVA类型转换怎么变

JAVA类型转换怎么变

时间:2024-09-23 10:51:30浏览次数:1  
标签:类型转换 怎么 JAVA int float 类型 转换 byte

类型转换

类型转换是将一个值从一种类型更改为另一种类型的过程。例如, 可以将String类型的数据“457”转换为数值型,也可以将任意类型的 数据转换为String类型。 如果从低精度数据类型向高精度数据类型转换,则永远不会溢出, 并且总是成功的;而把高精度数据类型向低精度数据类型转换时,则会 有信息丢失,有可能失败。 数据类型转换有两种方式,即隐式转换与显式转换。

隐式类型转换

从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作。这种类型的转换称为隐式转换。下列基本数据类型会涉及数 据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排列的 顺序为byte < short < int < long < float < double

int x = 5;
float y = x; // y = 5.0

隐式转换也要遵循一定的规则,来解决在什么情况下将哪种类型的 数据转换成另一种类型的数据。表列出了各种数据类型隐式转换的 一般规则。

image-20240923091040507

编译阶段

在编译阶段,Java 编译器会检查 x 的类型,并且知道它是一个 int 类型的值。由于 float 类型可以表示比 int 类型更大的范围,并且 float 类型具有更高的精度,所以编译器允许这种类型的转换而不需要显式的类型转换操作符。

运行阶段

在运行时,当这段代码被执行时,JVM 会将 int 类型的值转换为 float 类型。具体来说,这涉及到将 int 类型的 32 位整数值转换为 float 类型的 32 位单精度浮点数格式。

这个转换实际上是通过将整数值编码为一个特殊的浮点数来完成的,其中整数被视为一个十进制数,并且没有小数部分。这意味着,对于任何整数值,只要它在 float 类型可表示的范围内(即不超出 float 类型的最大值),这个转换就是精确无误的。

内存布局

在内存中,x 是一个 32 位的整数,而 y 是一个同样占据 32 位但按照 IEEE 754 标准存储的浮点数。当 x 的值被复制到 y 时,实际上发生了以下步骤:

  1. 读取 x 的值。
  2. 将这个整数值解释为一个浮点数,这意味着创建一个浮点数的内部表示形式,包括符号位、指数和尾数部分。
  3. 将转换后的值存储到 y 中。

由于 intfloat 都是 32 位宽,因此这个转换不会涉及额外的数据扩展或压缩。但是需要注意的是,尽管 5 作为一个整数可以直接转换为 5.0f 并且不会丢失任何信息,但对于某些其他的 int 值,转换到 float 可能会导致精度上的损失。

byte mybyte =127;//定义 byte 型变量 mybyte,并把允许的最大值赋给 mybyte
int myint = 150; //定义int型变量 myint,并赋值 150
float myfloat = 452.12f;//定义 float 型变量 myfloat,并赋值
char mychar = 10;//定义 char型变量 mychar,并赋值
double mydouble =45.46546;//定义 double 型变量,并赋值
//将运算结果输出

System.out.println("byte 型与 float 型数据进行运算结果为:"+(mybyte+ myfloat));
System.out.println("byte 型与int型数据进行运算结果为:"+mybyte*myint);
System.out.println("byte 型与 char 型数据进行运算结果为:"+mybyte/mychar);
System.out.println("double 型与 char 型数据进行运算结果为:"+(mydouble +mychar));

image-20240923092233328

mybyte 是一个 byte 类型的值,而 myfloat 是一个 float 类型的值。由于 float 类型的范围和精度都大于 byte 类型,因此 byte 类型的值会被提升为 float 类型,然后进行加法运算。最终的结果是一个 float 类型的值。

mybyte 是一个 byte 类型的值,而 myint 是一个 int 类型的值。byte 类型的值会被提升为 int 类型,然后与 int 类型的值进行乘法运算。最终的结果是一个 int 类型的值。

mybyte 是一个 byte 类型的值,而 mychar 是一个 char 类型的值。char 类型本质上是一个 int 类型的值(16 位),因此 byte 类型的值会被提升为 int 类型,然后进行除法运算。最终的结果是一个 int 类型的值。

mydouble 是一个 double 类型的值,而 mychar 是一个 char 类型的值。char 类型的值会被提升为 int 类型,然后 int 类型的值会被进一步提升为 double 类型,因为 double 类型的范围和精度都大于 int 类型。最后,两个 double 类型的值进行加法运算,得到的结果也是一个 double 类型的值。

显示类型转换

当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转 换运算(又称强制类型转换)。

执行显式类型转换时,可能会导致精度损失。除boolean类型外, 其他基本类型都能以显式类型转换的方法实现转换。

当把整数赋值给一个byte、short、int、long型变量时,不可以 超出这些变量的取值范围,否则必须进行强制类型转换。例如: byte b = (byte)129image-20240923102413377

int num = 10;
System.out.println("整数值为: " + num);

//将int转换为字符串类型
String data = String.valueOf(num);
System.out.println("字符串值为: " + data);

在这里,我们使用了Java String类valueOf()方法将int类型变量转换为字符串。

int a =(int)45.23; //45
long y=(long)456.6F; //456
int b = (int)'d'; //100

在浮点数向整数型转换的过程中,小数部分被丢弃了,因为 int 类型只能存储整数部分。这个过程是不可逆的,数据丢失是强制转换的常见问题。表达式强制转换,记得给表达式也加上括号,否侧计算机就会认为先强制转换d,再和a相加。

 double d = 9.99;
double a = 7.99;
int i = (int)(d + a); // 强制将表达式转换为 int
System.out.println(i); // 输出17
System.out.println((int)d+a); // 输出 16.99

四舍五入可以使用Math.round()方法。

标签:类型转换,怎么,JAVA,int,float,类型,转换,byte
From: https://www.cnblogs.com/ivanlee717/p/18426617

相关文章

  • 阿里云mysql数据库服务器错误怎么回事
    阿里云MySQL数据库服务器错误可能由多种因素造成,以下是一些常见的原因及解决方法:网络配置错误:检查服务器的网络配置,确保防火墙设置允许来自客户端的连接请求。确认IP地址或域名解析正确,且客户端能够通过网络访问到数据库服务器。MySQL服务未启动:确认MySQL服务已经在阿......
  • 怎么用ROS节点建立通信
    目录1.安装并初始化ROS2.创建ROS工作空间3.创建节点3.1.C++实现创建发布者节点(Publisher)创建订阅者节点(Subscriber)编译代码运行节点3.2.Python实现创建发布者节点(Publisher)创建订阅者节点(Subscriber)运行Python节点4.检查节点与话题在ROS(RobotOperatingS......
  • 一个初学者小白怎么学习成为黑客?
    前言黑客从入门到精通需要经过深入的学习和实践,这是一个需要长时间投入和大量精力的过程。在这份学习路线中,下面我将为你介绍黑客学习的基本知识和技能,帮助你逐步掌握黑客技能。一、入门阶段1.了解计算机基础知识学习计算机基础知识,如操作系统、计算机网络、数据结构等......
  • Java面试题大全(全网最全,持续更新)初级(2)
    1.基础语法1.1.Java的数据类型有哪些?Java有两种数据类型:基本数据类型(PrimitiveTypes):包括byte、short、int、long、float、double、char、boolean。引用数据类型(ReferenceTypes):包括类、接口、数组等。1.2.final关键字有什么作用?final关键字可以用来修饰类、方......
  • 实用为主,需求为王!通风天窗专业厂家谈谈通风天窗怎么选?
    通风天窗作为现代建筑的重要组成部分,不仅能够有效改善室内空气质量,还能增强建筑的自然采光与美观性。市场上通风天窗种类繁多,品质参差不齐,如何选购一款既满足功能需求又性价比高的产品,成为业主关注的焦点。成都昱合昇从以下方面为您总结通风天窗选购技巧。一、明确需求与环境......
  • idea运行java项目main方法报build failure错误的解决方法
    当在使用IntelliJIDEA运行Java项目的main方法时遇到"BuildFailure"错误,这通常意味着在项目的构建过程中遇到了问题。解决这类问题通常需要系统地检查和调整项目设置、代码、依赖项等多个方面。以下是一些详细的解决步骤,以及一个简单的代码示例,用于展示如何确保Java程......
  • JavaScript基础内容
    JavaScript字面量在编程语言中,一般固定值称为字面量,如3.14。数字(Number)字面量可以是整数或者是小数,或者是科学计数(e)。数组(Array)字面量定义一个数组:[40,100,1,5,25,10]对象(Object)字面量定义一个对象:{firstName:"John",lastName:"Doe",age:50,eyeColor:"blue"......
  • 出现这种报错怎么办?SQLSTATE[HY000]: General error: 1615 Prepared statement needs
    如果你遇到由于数据库配置问题导致前后台无法打开的情况,可以通过修改数据库配置文件来解决。具体步骤如下:解决步骤第一步:打开数据库配置文件使用Notepad++打开配置文件:使用Notepad++或其他专业文本编辑器打开数据库配置文件 application/database.php。例如,假设你的......
  • 易优eyoucms友情链接怎么添加?
    在易优CMS(EyouCMS)中添加友情链接的过程涉及后台设置和前端模板的调整。下面是详细的步骤:后台添加友情链接登录后台:登录到易优CMS的后台管理系统。进入SEO设置:在后台菜单中找到“SEO设置”或类似的选项。进入友情链接管理:在SEO设置中找到“友情链接”或类......
  • 【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景
    目录前言一、常见key-value二、时效性强三、计数器相关四、高实时性五、排行榜系列六、文章小结前言在笔者3年的Java一线开发经历中,尤其是一些移动端、用户量大的互联网项目,经常会使用到Redis作为缓存中间件的基本工具来解决一些特定的问题。下面是笔者总结梳理的一些常......