【一步一步了解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.mzph.cn/web/7236.shtml

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

相关文章

Docker之限制容器的资源使用

一、容器所用内存资源的限制 容器可使用的内存:物理内存和交换空间(Swap)。 1.1、用户内存限制 Docker默认没有设置内存限制。可以通过相关选项限制设置: -m(--memory):设置容器可用的最大内存。该值最低为4MB。--memory-swap&#xff1a…

AMEYA360:佰维存储推出工规级宽温LPDDR4X芯片,高可靠性赋能工业与汽车电子应用

近日,佰维存储发布了工规级宽温LPDDR4X嵌入式存储芯片,该产品传输速率高达4266Mbps,容量覆盖2GB~8GB,可适应-40℃~95℃宽温工作环境;采用BGA 200 Ball封装,尺寸小至10.0x14.5x1.0mm,满足数据通信、轨道交通…

内网端口转发与代理

思路:渗透的前提是双方能够建立通信。目前无法和win7建立通信,但是拿到了windows2003的权限,所以可以在Windows2003主机上面建立节点,作为跳板机去访问到内网。 目前状态:控制win2003(IP:192.1…

活动回放 | 如何进行全增量一体的异构数据库实时同步

以 AI领域为代表的新技术不断涌现,新的应用风口也逐渐清晰。为了加紧跟上技术发展的步伐,越来越多的企业开始着手,对仍以传统关系型数据库为主的应用后端进行现代化升级。 这就涉及到如何在不影响并保持现有业务系统正常运转的前提下&#xf…

软件测试产品交付包括哪些内容?

软件测试产品交付通常会包括以下内容: 1. 测试计划:详细的测试方案、测试范围、测试资源与时间安排等内容。 2. 测试用例:包括功能测试用例、性能测试用例、安全测试用例等各类测试用例。 3. 测试环境:包括硬件环境、软件环境、网络环境、数据环境等测试所需要的各种环境。 4. …

LeetCode 面试题 17.14 —— 最小 k 个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 第一种方法就是利用快速排序,第一次排序后,数组被划分为了左右两个区间 [ 0 , i ] , [ i 1 , a r r . s i z e ( ) − 1 ] [0, i], [i1, arr.size()-1]…

Docker入门指南:Docker容器的部署(一)

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 当今软件开发领域中,Docker 成为了一种流行的容器化技术。Docker 可以帮助开发者将应用程序及其依赖项打包到一个独立且可移植的容器中&#xf…

云服务器IDC机房网络无法访问github如何解决?

到站长之家查询一下github的IP地址。 https://tool.chinaz.com/ 然后,编辑服务器hots文件。 vi /etc/hosts 打开后,在文件最后一行添加 ​20.205.243.166 github.com

Hibernate 元数据模型(MetaModel)提示类没有找到错误

在进行一次编译的时候,提示下面的错误信息: java: java.lang.ClassNotFoundException: org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor 问题和解决 如果你对 Hibernate 的元数据还是不非常了解的话,请参考文章: JPA 的…

汽车 - 降档补油超车

降档补油这事可是开手动档最大的乐趣之一,甚至还是进阶技巧“跟趾”的基础,所以建议开手动档的朋友一定要熟练掌握。 首先我们要明白手动档降档的意义,简单来说,发动机在转速高的时候能获得更好的加速力。这点相信开手动档的朋友都…

2002-2021年各地区平均受教育年限数据(分性别)(含原始数据+计算过程+计算结果)

2002-2021年各地区平均受教育年限数据(分性别)(含原始数据计算过程计算结果) 1、时间:2002-2021年 2、来源:国家统计局、统计年鉴、各省年鉴 3、指标:行政区划代码、地区、年份、人均受教育年…

C++11,{}初始化,initializer_list,decltype,右值引用,类和对象的补充

c98是C标准委员会成立第一年的C标准,C的第一次更新是C03,但由于C03基本上是对C98缺陷的修正,所以一般把C98与C03合并起来,叫做C98/03; 后来原本C委员会更新的速度预计是5年更新一次,但由于C标准委员会的进…

Linux环境下的事件驱动力量:探索Libevent的高性能I/O架构

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之《Linux环境下的事件驱动力量:探索Libevent的高性能I/O架构》,在这篇文章中,你将会学习到Libevent的高性能I/O原理以及应用,并且我会给出源码…

一竞技MSI:淘汰赛抽签结果出炉 BLG和T1同半区,TES首轮交手TL!

北京时间5月6日,MSI在今天进入短暂的休赛,在昨天结束的入围赛之后,PSG战队作为外卡赛区唯一的队伍进入到正赛,另外欧洲赛区的FNC战队也是击败GAM战队拿到正赛的资格。在比赛结束之后,也是进行了淘汰赛的胜败分组赛的抽…

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布,发布了 8B 和 70B 参数量的模型,lmdeploy团队对 Llama 3 部署进行了光速支持!!! 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…

JS基础:8个算数运算符详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取完整web基础…

按钮组实现切换时背景变化

需求: 按钮组之间切换时,选中的按钮背景变色,其他按钮显示原来的颜色 css代码: .btnClass{width: 120px;border: 1px solid #eeeeee;color: black;background-color: white;} .btnChoosedClass{color: white;background-color:…

秋招后端开发面试题 - MySQL基础

目录 MySQL基础前言面试题MySQL 基础篇Mysql 的基础架构?MySQL 的长连接和短连接长连接引起的异常重启问题?说一下 MySQL 执行一条查询语句的内部执行过程?MySQL 查询缓存的功能有何优缺点?MySQL 的常用引擎都有哪些?I…

OpenHarmony实战开发-上传文件

Web组件支持前端页面选择文件上传功能,应用开发者可以使用onShowFileSelector()接口来处理前端页面文件上传的请求。 下面的示例中,当用户在前端页面点击文件上传按钮,应用侧在onShowFileSelector()接口中收到文件上传请求,在此接…

详解xml-java语言

1.XML在线学习手册 XML 教程 2.XML可以做什么 1.给两个程序之间进行数据通信。现在用的最多的是JSON。 2.给服务器做配置文件。 3.存储复杂的数据关系。 4.还可以充当小型的数据库。 3.书写格式 <?xml version"1.0" encoding"UTF-8" ?> <…