自学Java6(保姆级教学)——基本数据类型的转换

createh54个月前 (02-01)技术教程48

在上一期的文章中,我们认识了Java的几种运算符,先来简单回顾一下Java共有几类运算符:

1.算数运算符:+,-,*,/(加减乘除),加上一个%(取余)

2.赋值运算符:=

3.关系运算符:>,<,==,!=

4.逻辑运算符:&,|,^和!

5.短路运算符:&&和||

6.三目运算符(也有叫三元运算符):a>b ? a : b

篇幅所限,这里不再多做赘述,感兴趣的小伙伴可以去看看我前面的几篇文章,相对写得还是比较详细的。

那么,本期文章我们来说一下,我们为什么会用到数据类型的转换?这个例子其实在我们的生活中是经常发生的,比如:你买东西,一件T恤50元,一件裤子40.5元,那么我一共要付多少钱呢?对于我们人来说,这就是个很简单的加法运算,恐怕一年级的学生也不会做错,但是对于计算机而言,这就不是我们看上去的那么简单的一个过程了。

如果是我们用Java去计算的话,我们会将T恤的价格定义为整数型的变量,会将裤子的价格定义为浮点型的变量,那么问题就来了,我们需要定义一个什么类型的变量去接受这两个变量的和呢?或者说,这两个变量,在不做其他操作的情况下,是否可以相加呢?那么我们可以去Java代码中去实验一下,分别用int和double类型的变量去接受一下结果,看看是什么情况:

首先是用int类型去接收:

其实我们的开发工具已经很智能在给我们报错了(其实有点基础的都知道这是IDEA,但是为了照顾基础差的同学,我们暂时不去管这是什么软件,我们只需要去看它出现的现象就可以了),那么我们运行一下,看看具体的输出结果:

可能有很多初学的小伙伴看不懂是什么意思,但是你只要看得懂中国字,应该也就大概知道出了什么问题:“不兼容的类型: 从double转换到int可能会有损失”,说明当int类型的数据与double类型的数据去相加的时候,我们需要去用double去接受,到底是不是这样呢?我们眼见为实:

这里开发工具就没有给我们报错,运行看看结果是否正确:

正确的输出了90.5的答案,那么为什么会出现这样的情况呢?

首先我们假设int可以接收它们两者的和,但是90.5,很明显是个小数,而我们的int只能存储或者说定义整数,那么我们如果用int去接收这个数的话,最多也就只能只能接收整数的部分,即90,那么后面的0.5就会损失掉,这就是前面报错提到的精度损失。但是很奇怪的是,为什么用double就可以接收了呢?那是因为浮点型的取值范围是要大于整数型的,而整数型的数据,比如说上文中的50,可以写成50.0,并不会有任何的精度损失,那么由较小的取值范围转换为较大的取值范围的这么一个过程,我们就叫它作自动类型转换

那么说到这里,可能有的小伙伴就要不服了,那我们就要用int去接收呢?难道就没办法了吗?很明显,办法是有的,但是肯定是要损失精度的,我们可以使用强制类型转换:

如图所示:这样的话程序就不会报错,但是我们看一下运行结果:

结果就变成了90,很明显,和实际的90.5还是有一定的偏差的。由此可以看出,强制类型其实是由范围较大的数据转换为范围较小的数据的这么一个过程,但是这个过程肯定是会损失精度的。

这里,我按照取值范围由小到大的顺序,给大家拍一下整数型和浮点型:

byte

从左至右则是自动类型转换,从右至左则需要进行强制类型转换。

其实这个稍微拓展一点,我个人觉得有点类似于java三大特性中的多态。如果是没有基础的小伙伴,这一段可以不用看,因为这一段是属于我自己的一个扩展的想法,有基础的同学可以跟着这个思路去拓展一下:

我们都知道Java的多态是父类引用指向子类对象,其实这个说白了,也是一种由大到小的这么一个转换,就好比说,我们可以说子类一定是父类,但是我们不能说父类一定是子类。举个例子:如果我们将总的生物类作为父类的话,那么人,植物和动物都可以做它的子类,我们可以说人是生物,也可以说植物是生物,但是我们不能反过来说,生物是人,或者生物是植物这样的话,那样很明显不符合逻辑,很明显父类的范围是要大于子类的范围的,所以我觉得强制转换其实和多态是存在一定的可对比性的,我们可以将知识进行串联和比较,这样会更有利于我们对知识的理解。

最后更文不易,希望大家可以多多点赞评论分享,当然如果可以留下一个关注自然是更好的啦~您的支持就是我更文最大的动力!

相关文章

你知道子类引用为什么不能指向父类对象吗?反汇编一起看看

在java、C++等面向对象的语言中,实现多态的方式就是使用父类引用指向子类对象,所以父类引用指向子类对象是没有任何问题的,但是,大家有没有想过,子类引用可以指向父类对象吗?答案是不可以!但是为什么呢...

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试均可)

方法重载和方法重写的区别方法重写重写体现在继承关系上。 在Java中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以...

三石说:java基础 类与对象(java的类和对象怎么理解)

类:类是封装对象的行为和属性的载体,具有相同属行和行为的一类实体。类中包含方法和属性。类中的构造方法:1.构造方法没有返回值2.名称与类名相同,在构造方法中可以为成员变量赋值,也就是初始化成员变量,若...

Java 最细的集合类总结(java中的集合类)

数据结构作为每一个开发者不可回避的问题,而 Java 对于不同的数据结构提供了非常成熟的实现,这一个又一个实现既是面试中的难点,也是工作中必不可少的工具,在此,笔者经历漫长的剖析,将其抽丝剥茧的呈现出...

JAVA学习基础之JAVA类集(java类中的类)

第十三章、JAVA类集在JAVA中必须掌握的知识点,会开发的:1、面向对象; 2、JAVA的类集; 3、JAVAIO; 4、JDBC;13-1、认识类集、Collection接口类集实际上就是一个动态...