5.16--java数据类型转换及杂记

我们先来回顾一下前面学的java中的数据类型:

java中数据类型分为基本数据类型和引用型数据类型

8种基本数据类型(值类型)

整型:byte(-128~127)、short、int、long long数据结尾要加“L”【C#中byte的数据范围为:(0-255)】

浮点型:float、double float数据结尾要加“F”

字符型:char

布尔型:boolean

除了以上8中基本数据类型之外,其余的数据均为引用型数据类型

而在C#中,除了以上基本的数据类型为值类型外,值类型还包括:枚举enum(java中enum为引用类型数据),结构体(struct)等。

引用类型都包括类class、数组、接口、对象、string字符串等。

数据类型转换分为两种

  1. 自动类型转换(也叫隐式转换)

条件:数据范围小的--->数据范围大的

2.强制类型转换(也叫显示转换)

条件:数据范围大的--->数据范围小的

格式: 范围小的数据类型 变量名=(范围大的数据类型)原本范围大的数据

注意事项:强制类型转换一般不推荐使用,因为有可能发生精度损失和数据溢出。

示例如下:

v2-43418153ad4f3065b997e3f0b2eaa5d5_b.jpg

v2-03c5f103d96e96e1efc886120ca7ac07_b.jpg

数据范围大的转化为数据范围小的,当需要转化的数本身不超过数据范围小的范围时,是正常的。当超过了,之后,数据就溢出了,不再是原来的数值了,已经是物是人非了,如下图:

v2-6a7abd4f3f7c686a2aa751c023f18d79_b.jpg

v2-5f185f36fa56711bd1f1d24c08db39d1_b.jpg

精度损失例子:

v2-e52522758fc7a926a2a35c81172a0c52_b.jpg

v2-06840edd75f14128075d4373987a837c_b.jpg

3.5变成了3,这并不是四舍五入,而是所有的小数位都会被舍掉

byte、short、char这三种类型都可以发生数学运算,当他们发生数学运算的时候,都会首先转化为int再进行运算。

例如:

v2-18970054f1202a6151d038d110be8d8c_b.jpg

byte和short、char进行运算时会首先转化为int再进行运算,上面一个byte一个short,一个2一个3 首先会自动被提升为int类型,在进行运算就是int+int结果还是int,所以需要int类型的数据来接收。

问题:

‘1’+1=?=====>答案是50

v2-b18dec63795dc320f8c4d66e77e81f19_b.png

v2-81594854cb87926c21921f30d3fceeea_b.jpg

嗯???为什么呢?大家不要看错了,这是一个字符'1'而不是字符串"1",大家都知道字符串和任何东西相加。那肯定是拼接“11”,但为什么字符1加上int的1等于50 呢?

既然结果等于50,那么字符1 是等于49 的,也就是说‘1’字符1被当成了49来处理了。

首先我们知道计算机当中一切的数据全都是二进制的,就是0和1。比如计算机上的电影、音乐、游戏这些文件全都是二进制。所以这个字符1 底层也是二进制。 计算机底层会用一个二进制的数字来代替 字符1,就是49。

一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成为一个数字。

那这些规则是怎么定的?下面有一个ASCII码表

v2-a3b934911c36883e7104f73912288c03_b.jpg

可以看到字符1 对应的就是会被计算机翻译成49。

好了今天的学习差不多到这里了,后续诸如流程控制语句、循环、方法等就不再赘述,语言只是工具而基础是相通的,我们只抽出来不会和生疏的薄弱的进行学习和巩固,后续将加快进度学习中高级知识。

加油,愿举匏樽以相属,共进退。