一. 深入理解变量
在之前的讲解中,我们谈论的都是不同类型变量的问题。这一节中,我们将变量投入运算,探索在运算过程中,应该遵守的规则。
→第二章的思路,我们可以理解为,介绍变量,运算符,以及两者结合在一起所需要注意的事项。
在这里对上一节《变量的基本演示》做一个小结,主要有三点。直接书写数字常量时,系统会给常量一个默认的类型,如int和double,当书写的常量赋值给定义好类型的变量时,就会产生错误。还有就是书写的常量和本身默认的类型起冲突。最后一点就是在书写源程序的过程中,一定要采用英文字符。→这里常量拥有两个盒子,java会给它一个默认的盒子,然后还要再装入另一个盒子。默认的盒和装入的盒子都会出现问题。
二. 变量的运算规则(还没介绍运算符,就开始介绍变量参与运算时的注意点)
运算的两端都是相同类型才可以,不然无法进行运算。
如果两端都是数值类型的话,虽然具体类型不一样,但是一样可以运算。原理是什么?前提一定是数值型,(为什么其他类型不行?其他类型之间根本无法进行算术运算。)两端数值类型不同,还可以进行运算的原理在于,可以自动提升数值类型。距离说明:byte a=3; int b=4; b=a+b; 本来类型不一样不可以运算,但因为都是数值型,它们本质上只是占据内存的空间大小不一样,将小的空间提高,并不影响计算。这里将byte的一个字节提升至四个字节的int,本质上数值大小没变,只是空间提升,不会影响计算结果,这就是这个原理能够执行的原因。
→变量在参与运算的时候,有要求,只能是相同类型的在一起运算。避免不同类型在一起出错,也是强类型带来的好处。
接着,如果byte a=3;int b=4;a=a+b的话,在DOS运算中,会报错为精度丢失。右边计算的时候,自动提升类型,提高空间是没有问题的,但是在将四个字节的数据赋值到一个字节的空间中时,就会产生精度丢失。为了强行将四个字节的内容赋值给一个字节的空间,这就产生了强制类型转换,a=(byte) (a+b)但我有点搞不清的是,强制的意义何在?在强制类型转换时,会存在舍弃,丢失精度的问题。有时候舍弃完,得到的是负数。在计算机中,到底存放的二进制是符号型还是真值?这里报错的原因在于,变量间在进行运算赋值时,类型不同,从大空间到小空间,会有精度缺失,即使真实值没有那么大。最重要的一点在于,变量的不确定性。