【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明:此刻你我都在努力~

                                加油陌生人~

                                

个人主页:  Gu Gu Study    

                                              ​​

专栏:一步一步了解Java

喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。

如果喜欢能否点个赞支持一下,谢谢啦!

                                                                                                                作者:小闭


 
Java 中的类型转化

在 Java 中,类型转化是一种常见的操作,它允许我们将一种数据类型转换为另一种数据类型。类型转化可以分为自动类型转换和强制类型转换。

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

看上上面的代码是否有了那么一些疑惑了呢?至于为什么,下面的知识会给你答案! 


一、自动类型转换

自动类型转换是指在不丢失信息的情况下,将一种数据类型自动转换为另一种数据类型。这种转换通常发生在取值范围较小的数据类型向取值范围较大的数据类型转换时。(代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。


 
1.1 自动类型转换(隐式)
 

 例如:byte转化为int类型

byte b = 10;
int i = b;  // 自动类型转换

这里byte的取值范围是比int型的取值范围小所以是可以完成自动类型转换

public class Test {public static void main(String[] args) {System.out.println(18);// 整型默认情况下是intSystem.out.println(18.8); // 浮点型默认情况下是doubleint a = 100;long b = 10L;b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全float f = 3.14F;double d = 5.12;d = f; // 编译器会将f转换为double,然后进行赋值f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为bytebyte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失}
}

因为现在的编译器功能都比较强大所以,这里编译器已经将错误的地方都给标红了,我们是很容易看出来哪里是错误的。当然注释里也是很明确地写出来错误的原因了。

二、强制类型转换

2.1强制类型转换(显式)

强制类型转换是指通过显式的操作将一种数据类型强制转换为另一种数据类型。这种转换可能会导致信息丢失或数据错误,因此需要谨慎使用。

有小伙伴可能就会疑惑那如果我非要强制将取值范围大的转换为取值范围小的类型,有没有办法呢,有那就是强制类型转换,当然它也可以将取值范围小的类型强制转换为取值范围大的数据类型。
 
强制类型转换的语法为: (目标类型)值 。
 
需要注意的是,在进行强制类型转换时,如果转换后的结果超出了目标类型的取值范围,可能会导致数据异常。
 

public class Test {public static void main(String[] args) {int a = 10;long b = 100L;b = a; // int-->long,数据范围由小到大,隐式转换a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败float f = 3.14F;double d = 5.12;d = f; // float-->double,数据范围由小到大,隐式转换f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败a = d; // 报错,类型不兼容a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错boolean flag = true;a = flag; // 编译失败:类型不兼容flag = a; // 编译失败:类型不兼容}

注意事项: 

1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型

2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失

例如:

public class Test {public static void main(String[] args) {int a;float i;double b=3.14;a=(int)b;i=(float)b;System.out.println(a);System.out.println(b);}

但是如果将a+b;赋给一个short类型就会报错。因为会自动将a+b提升

3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

如图: 

这里我们的byte类型的最大值为127,当我们字面赋值为128时,这里就直接标红告诉我们错误了,这就是java相比于C的严谨性。 

4. 强制类型转换不一定能成功,不相干的类型不能互相转换

 如下:boolean类型是不能参与强制转换类型的


 



三、类型提升

3.1  在进行某些运算时,不同类型的数据会被提升到共同的类型。例如,在进行算术运算时, byte 和 short 类型会被提升到 int 类型。
 

 

如上面,short与byte类型直接就可以自动提升为int类型了,所以编译器是无法进行自动转换类型进行正常赋值的。


 四、 字符串类型

4.1 字符串转换为整形

再Java中字符串也是可以强制转换为整形的。

如下:

String str = "100";
int num = Integer.parseInt(str);

这时num的值就是100.


4.2整形转换为字符串

int num = 10;
// 方法1
String str1 = num + ""; 
// 方法2
String str2 = String.valueOf(num);


文章到末尾,喜欢的话,点个赞吧。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/670797.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题】739. 每日温度(单调栈)

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 739. 每日温度 2. 题目描述 3. 解题方法 用一个栈st保存每个数的下标,同时创建一个数组res保存结果,初始值都为0。循环遍历题目中的数组temperature。如果temperature[i] > st.top()&#x…

3W 3KVDC 隔离单输出 DC/DC 电源模块——TPG-3W 系列

TPG-3W系列是一款额定功率为3W的隔离产品,国际标准引脚,宽范围工作、温度–40℃ 到 105℃,在此温度范围内都可以稳定输出3W,并且效率非常高,高达88%,同时负载调整率非常低,对于有输出电压精度有…

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置

作者主页:点击! ENSP专栏:点击! 创作时间:2024年5月6日20点26分 华为防火墙双机热备是一种高可用性解决方案,可以将两台防火墙设备组成一个双机热备组,实现主备切换。当主用防火墙出现故障时&…

Socket编程--TCP连接以及并发处理

文章目录 流程图API阻塞IO/非阻塞IOcode 流程图 网络传输流程: TCP连接: API 客户端: socket: 创建套接字 domain: AF_INET :IPv4 type: SOCK_STREAM(tcp)、SOCK_DGRAM(udp) protocol: 0 默认协议 返…

OpenCV4.9去运动模糊滤镜(68)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9失焦去模糊滤镜(67) 下一篇:OpenCV如何通过梯度结构张量进行各向异性图像分割(69) 目标 在本教程中,您将学习: 运动模糊图像的 PSF 是多少如何恢复运动…

vue3 axios数据请求封装

准备工作 vue3jsvite 首先确认package.json中有axios 如果没有 运行 npm install axios 安装axios 成功后在package.json文件会显示。 第一步 创建app.js、request.js 两个文件在同级目录下即可 api.js import instance from "./request"; const api_name "&qu…

蓝桥杯-网络安全比赛(7)基础知识 HTTP、TTL、IP数据包、MSS、MTU、ARP、LLMNR、MDNS、NBNS。

1. IP中TTL值能够给我提供什么信息?2. IP头部中标志、13位偏移、32位源IP地址、目标IP、IP数据包格式,有多少字节3. IP头部中的16位标识是什么?4. MSS 和MTU分别有多大?5. 怎么获取路由IP信息?PING、NSLOOKUP、TRACERT…

[UDS][OTA] 自定义 IntelHEX (IHEX) format read/write library in C

参考修改 参考github的MIT协议开源项目 ihex 改写的代码 https://gitee.com/liudegui/intelhex-c 修改点: 修改Makefile脚本,支持x86_X64平台和aarch64平台将默认读取行长度设置为16位删除与ihex和bin之间的转换无关的示例代码 十六进制描述 HEX格式…

基于TL431和CSA的恒压与负压输出

Hello uu们,51去那里玩了呀?该收心回来上班了,嘿嘿! 为什么会有这个命题,因为我的手头只有这些东西如何去实现呢?让我们一起来看电路图吧.电路图如下图1所示 图1:CSA恒压输出电路 图1中,R1给U2提供偏置,Q1给R1提供电流,当U1-VOUT输出大于2.5V时候,U2内部的三极管CE导通,使得…

幻兽帕鲁游戏主机多少钱?幻兽帕鲁游戏服务器一个月仅需32元

随着游戏产业的蓬勃发展,腾讯云紧跟潮流,推出了针对热门游戏《幻兽帕鲁Palworld》的专属游戏服务器。对于广大游戏爱好者来说,这无疑是一个激动人心的消息。那么,腾讯云幻兽帕鲁游戏主机到底多少钱呢?让我们一起来揭晓…

某东抢购某台脚本-低调

某东抢购某台脚本 小白操作-学习使用 注意: 本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提…

Git -- reset 详解

引言 当我们在项目中有多个人协同开发时候,难免会出现一些错误的提交或者删除了一些重要文件。我们需要回滚到指定的某一个节点。那些乱七八糟的各种提交都要清除掉。 这时候,我们的指令就要用到了。reset 正文 git reset。它的一句话概括 git-reset …