目录
一、常量与变量
常量:程序运行期间,固定不变的量
变量:会发生改变的量
注意:
在之前的文章中,我们提到过“Java源文件都是由一个或者多个类组成”
既然如此,为了更好的分辨成员变量与局部变量,我们来看一个图:
成员变量 :定义在类体中方法外的变量
如果没有指定初始值,Java编辑器会为其指定默认值。对于Boolean变量,默认值是false;对于byte、short、int、和long变量,默认值是0;对于char变量,默认值是'\0'空字符;对于float和double变量,默认值是0.0;对于引用型变量,默认值是null
局部变量 :定义在类体中方法中的变量
如果没有指定初始值,Java编辑器会为报错!
不管是哪种变量,定义后都应该初始化,防止出现不必要的错误 以上提到的Boolean、byte、short等是变量的数据类型,接下来一起来看Java中数据类型的分类...
二、数据类型
数据类型就是用来定义不同种类变量的
1. 数据类型的分类
2. 数据类型的字节大小及数据范围
特别注意:
1. 系统默认整型是int型,为了区分int类型与long类型变量,通常在long类型定义的变量数值后加上l或者L。尽量大写。因为小写的l和数字1在某些编辑器实在是太像了!
2. 定义float类型,float a=1 如果不在数值后标注小写f或者大写F,编译器会自动识别成double型。最好写成float a=1.F
3. Java中的char类型是2个字节,与c语言中不同! char定义的数值只能是正整数! Java中使用 Unicode表示字符. 因此一个字符占用两个字节,表示的字符种类更多, 包括中文
执行 javac 的时候可能出现乱码,可以在执行 javac 时加上 -encoding UTF-8 选项即可
4. boolean 类型只有 true 或 false ,Boolean类型是用来判断条件的。 Java当中只能用true or false判断条件,不能用0或者非0。否则程序报错!
数据范围到底是怎么计算出来的呢?
我们以char类型举例来看一看 :
注意:10000000在计算机中无法用原反补码的形式计算,计算机会自动将其识别成-128
将数据范围画成一个⚪,以中心为轴。我们发现:无论是左半圆还是右半圆,顺时针旋转,数值会越来越大!
做个题感受一下:
解析:答案:256
3. 类型转化
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)
3.1 自动类型转换(隐式)
数据范围小的转为数据范围大的时会自动进行
整型默认是int型,所以这里整型100赋值给a变量的话,会发生隐式类型转化
整型与double的转换
3.2 强制类型转换(显式)
范围大的赋值给范围小的会报错。但特殊情况下,我们又需要这种操作,该怎么办呢?
这就需要我们的强制类型转换了!
1. 范围大的类型 -> 范围小的, 需要强制类型转换, 但是可能精度丢失
2. 不相干的类型不能互相转换
4. 类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
1. int与long之间:int会被提升为long
2. byte与byte的运算
注意:
虽然 a 和 b 都是 byte, 但是在计算 a + b 时会先将 a 和b 都提升成 int, 再进行计算。得到的结果也是 int, 此时赋给 c, 就会出现上述错误。
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据。为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 都会先提升成 int, 再参与计算。