8、基本数据类型转换(自动转换和强制转换)

server/2024/10/21 6:29:00/

基本类型转换

  • 1、自动类型转换
  • 2、强制类型转换

1、自动类型转换

定义:当Java程序在进行赋值或者运算时,精度小的类型会自动转换成精度大的数据类型,这个就是自动类型转换。(自动小转大)
背多芬:
在这里插入图片描述

这里要明确一个概念:高司令当初创建Java的时候规定char 和 byte、short是不能自动转换,所以这是Java语言的规则,我们记住就可以了。
另外,Boolean在Java中只有true和false,没有0/1,所以不参与类型转换。
在long(8字节)可以转换成float(4字节)中,我其实查了一些资料,就我个人理解:应该是因为float采用科学计数法,本身精度就大,所以能自动转换。(感兴趣的可以自己去查一下哈,我不太感兴趣,所以直接背喽😁)

使用细节:
①有多种类型数据一起进行混合运算时,系统首先自动将所有数据转换成容量最大的数据类型,然后再进行计算。

java">int n1 = 10;
float f1 = n1 + 1.1F;		 //float
System.out.println("f1 = "+f1);    
double d1 = n1 + 1.1;		//double
System.out.println("d1 = "+d1);

结果:
在这里插入图片描述
分析一下: 第二条语句中参与运算的有int 和 float,所以 int类型 先转换成 float类型,再进行运算(注意:此处 1.1 一定要加 ‘ F ’,不然系统会默认为double,然后报错,所以变量最终的类型精度要大于或等于运算结果的精度),第四条语句同上。

 
②当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
小  ----自动类型转换---->   大
大  ----强制类型转换---->   小

③、(byte,short)和char之间不会自动转换。
在这里插入图片描述

 
④byte,short,char三者任意可以进行计算,在计算时首先转换为int类型。

java">char c1 = 1;
byte b1 = 1;
byte b2 = 2;
short s1 = 1;int x = c1 + b1;
System.out.println("c1 + b1 = " + x);int y = b1 + b2;
System.out.println("b1 + b2 = " + y);long z = c1 + b1 + s1;
System.out.println("c1 + b1 + s1 = " + z);

结果:
在这里插入图片描述
我们可以从溢出角度理解,假设两个byte类型、赋值为127的变量相加,那么结果是254,而byte是一个字节,范围是(-128~127),如果仍然存进byte类型,就会溢出。同理,这三者任意搭配都有可能出现溢出的情况,因此直接拿精度(容量)较大的int类型去装它们,可以避免这种情况的发生。

⑤Boolean类型不参与转换。
前面提过了,Java中Boolean只有true和false的取值,没有0/1,所以不能自动转换。
在这里插入图片描述

2、强制类型转换

定义:自动类型转换的逆过程,将容量大的数据类型转换成容量小的数据类型。使用时要加上强制转换符(),eg:(int),(float)…但可能造成精度降低或溢出,格外要注意。

上代码:
在这里插入图片描述
结果:
在这里插入图片描述

分析一下:
Ⅰ、(int)1.9很明显损失了精度,不赘述了。
Ⅱ、用(byte)把 int类型进行强制转换,系统首先会判断这个将要存进的数的大小,若在byte精度范围里面,则可以存进去;若超出了精度范围,就会出现第三种情况,造成数据溢出。(其他强制转换也是如此。)

使用细节:
①强制符号()只针对最近的操作数有效,往往会使用小括号提升优先级。
在这里插入图片描述

 
来练习一下吧:

java">short s = 12;		//ok
s = s - 9;			//错误,int -> shortbyte b = 10;		//ok
b = b + 11;			//错误,int -> bytechar c = 'a';		//ok
int i = 16;			//ok
float d = .314F;	//ok
double result = c + i + d;		//ok, float -> double

本人正在B站跟着韩顺平老师学Java(非广告),所以做个笔记仅供学习,文章虽标为原创,但大体思路是韩顺平老师的授课思路,在此基础上加上了自己的理解,不喜勿喷哦。
大家一起学,一起进步!!
各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。


http://www.ppmy.cn/server/35048.html

相关文章

云原生周刊:Terraform 1.8 发布 | 2024.5.6

开源项目推荐 xlskubectl 用于控制 Kubernetes 集群的电子表格。xlskubectl 将 Google Spreadsheet 与 Kubernetes 集成。你可以通过用于跟踪费用的同一电子表格来管理集群。 git-sync git-sync 是一个简单的命令,它将 git 存储库拉入本地目录,等待一…

StringUtils中isBlank()和isEmpty()的区别

1.首先导入依赖common-lang3 <!--string的扩展api--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> <!-- 请使用最新版本 --></dependency&g…

GIS设计与开发课程设计(一)

环境&#xff1a;Windows10专业版 ArcGIS10.2 ArcEngine10.2 Visual Studio 2019 因每个人电脑版本和软件版本不同&#xff0c;运行的结果可能不同 系列文章&#xff1a; GIS设计与开发课程设计&#xff08;一&#xff09; GIS设计与开发课程设计&#xff08;二&#xff09;…

Leetcode编程练习

面试题-消失的数字 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:void reverse(vector<int>& nums, int start, int end) {while (start < end) {swap(nums[start], nums[end]);start 1;end - 1;}}void rotate(vector<int>& …

【前端开发行业市场分析报告】

前端开发行业市场分析报告 一、行业分析 1. 行业概况 前端开发是互联网行业中的重要部分&#xff0c;主要负责用户界面的设计和实现。随着互联网的普及和技术的发展&#xff0c;前端开发的重要性日益凸显。它涉及到的技术包括HTML、CSS、JavaScript等&#xff0c;并且需要与…

数据库原理及技术 第七章 数据库设计 实验

目录 题目1解法 题目22-1答案 2-2答案 题目33-1答案 3-2答案 题目4答案 题目1 1、某商场可以为顾客办理会员卡&#xff0c;每个顾客只能办理一张会员卡&#xff0c;顾客信息包括顾客姓名、地址、电话、身份证号&#xff0c;会员卡信息包括号码、等级、积分&#xff0c;给出该系…

git 配置相关

问题一&#xff1a;ssh-keygen -t ed25519 -C "Gitee SSH Key" 这个命令中的 ed25519 字符是什么意思&#xff1f; ssh-keygen 是一个用于生成SSH密钥的工具&#xff0c;SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于加密方式远程登录和其…

高速应急广播校园网络广播防水音柱40-80W应急广播ip音柱

高速应急广播校园网络广播防水音柱40-80W应急广播ip音柱 SV-7042是一款网络音柱&#xff0c;具有10/100M以太网接口&#xff0c;从网络接口接收网络的音频数据解码后播放。 本网络音柱一般内置4个喇叭&#xff0c;提供立体声的音频播放。本网络音柱可直接播放来自网络的音频&…