当前位置: 首页 > news >正文

类型的转换

首先我们要了解java中的数据类型转换是指将一种数据类型转换成另一种数据类型的过程。
什么时候会用到?我觉得两种情况会用到

  • 等号左右两边类型不一致(一般发生在赋值时)
  • 不同类型的数据参与运算(一般发生在计算时)

转换也分两种:

  • 自动隐式类型转换(自动,一般都出现在小转大时)
  • 强制类型转换(手动,一般出现在大转小时)

现在,我们要记得一个各类型的取值范围的大小,详解在另一篇,感兴趣的读者可以自行前往查看:

小数 > 整数 >= 字符
double > float > long > int > short > byte,char
小转大

1.赋值时,等号两边类型不一致

/*
* 1. 等号两边类型不一致   long = int
* 2. int自动转换为long
* */
long l = 12;
double d = 12.5f;

2.计算时,参与计算的变量的类型不一致

/*
*  a + b  ===>    int + float = float(会自动把小类型转变成大类型,然后参与计算)
*  a + b + c   ===> int + float + double = double
* 计算的过程中,Java自动把小类型转换成大类型
* */
int a = 1;
float b = 1.2f;
double c = 1.22;
float e = a + b;
double f = a + b;
double g = a + b + c;

此外,当char参与计算时

/*
* c1 + c2 ===> char + int = int
* chart会转变成int,然后参与计算
*/
char c1 = 'A';
int c2 = 5;
int c3 = c1 + c2;
大转小

取值大范围的数据类型转换为取值小的数据类型:

  • 取值范围小的数据类型 变量名 = 取值范围大的数据类型 -> 需要强转

强转语法 :

  • 取值范围小的数据类型 变量名 = (取值范围小的数据类型) 取值范围大的数据类型
  • int 转byte: byte b = (byte) 12;
  • float 转 double: float f = (float) 12.2;
 /*
* float f = 12.2; 这句代码会报错,你把大的转变成小的,需要手动的设置。
* */
float f = (float)12.2;
System.out.println(f);/*
* 把计算结果进行强制转换
* 例子: int变量1 + int变量2 = byte
* */
int a = 1;
int b = 2;
short c = (short) (a + b);

注意事项:
我们需要注意三个场景:
把int转成byte有啥问题?

  • 数据溢出

把double转为float有啥问题?

  • 精度丢失

把float转为int有啥问题?

  • 精度丢失
// 1. 数据溢出
byte b = (byte)129;
// -127  超出之后,从头再开始数
System.out.println(b);// 2. 精度丢失
float f = (float) 3.333333335326565;
System.out.println(f); // 3.3333333 精度丢失int i = (int) 3.5235f;
System.out.println(i); // 3 精度丢失

开发中对于强制类型转换,慎用。
byte,short赋值问题:

// byte赋值问题.// 这里本身是一个大转小,需要程序员手动转换。但是如果没有超过范围,java会自动帮我们强转// 如果超过范围,必须手动强转。(short同理)byte b1 = 12;

byte,short参与运算:

// byte参与计算byte a = 1;byte b4 = 2;// byte参与计算,默认会转为int类型byte result = (byte) (a + b4);

char类型参与运算:

// 1. char会转为数字。
// 2. 找到char对应的ascii,如果ascii中没有,会去unicode编码(万国码)中寻找。然后再计算
// char参与计算System.out.println('雨' + 0); // 雨对应的unicode码System.out.println('A' + 0); // A对应的ASCII码
http://www.lryc.cn/news/349206.html

相关文章:

  • memset函数
  • Java面向对象——多态
  • python 对矩阵与矩阵之间对应位置的元素,做softmax操作,代码实战
  • Angular前端项目在Apache httpd服务器上的部署
  • Oracle 更改数据文件位置的几种常用方式
  • 【opencv】图像畸变校正
  • Charger之二输入电压动态电源原理(VIN-DPM)
  • 【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)
  • 曲线救国:window 安装 docker
  • 番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)
  • Pascal Content数据集
  • 【Unity】使用Resources.LoadAll读取文件的顺序问题
  • pdf怎么标注红色方框?五种PDF标注红色方框方法
  • C++字符串细节,面试题06
  • AutoModelForCausalLM.from_pretrained 函数调用本地权重报错
  • 【qt】动态属性
  • Git知识点总结
  • 【数据库】数据库指令
  • 设计模式——状态模式(State)
  • 理解打包好的vue项目结构dist包
  • 24深圳杯C题18页高质量论文+可执行代码+图表
  • Midjourney Imagine API 申请及使用
  • 电子邮箱是什么?怎么申请一个电子邮箱?
  • C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型
  • 【数据结构】栈和队列专题
  • 2024年程序员最应该关注的几件事?
  • 【初阶数据结构】单链表基础OJ题讲解
  • 基于Java的俄罗斯方块游戏的设计与实现
  • Hadoop 3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive+Sqoop 分布式高可用集群部署安装 大数据系列二
  • umi搭建react项目