Skip to content

Latest commit

 

History

History
155 lines (84 loc) · 8.2 KB

Lesson03.md

File metadata and controls

155 lines (84 loc) · 8.2 KB

Lesson 03 - 八种基本数据类型和标识符

想象你需要计算南方科技大学本科计算机系的男女比是多少。

我们来仔细想象你的脑袋瓜要经历怎样的计算步骤:

  1. 用大脑记住计算机系男生的数量
  2. 用大脑记住计算机系女生的数量
  3. 用大脑将两个数字相除
  4. 得到结果
  5. 告诉你的朋友这个比例是真**的高

在这个过程中,出现了两个大家可能不会想到的步骤,那就是要记住某个数字

而为了让计算机也能做计算,我们需要计算机也存储着运算所需的数据。当我们需要一些数据进行运算时,我们某种方式去方便快捷地访问这些数据。

“其实计算机的大脑就像一个‘摩天大厦’,有很多很多一间一间的‘小房子’,计算机就把需要记住的数放在‘小房子’里面,一个‘小房子’只能放一个数,这样计算机就可以记住很多数了。”

littlehouse

(上述文段及图片引自啊哈磊 《啊哈C语言》)

1 变量

刚才所说的“摩天大厦”就是计算机的内存(Memory),而“小房子”则是变量(variable)。为了能让“数据访客”住进我们的“摩天大厦”,我们得给他们分配“小房子”才行,也就是去创建变量。

创建变量有几个要素:

  • 变量名:区别不同变量,也可以通过变量名去访问相应变量对应的数据
  • 数据类型:这会决定这个变量里所存储的数据的类型,变量类型有很多种,比如整型、浮点型等。
  • 初始值:一般在创建一个变量的时候,我们都需要赋给它一个初始值,也就是给它一个初始数据。如果你不这样做却直接访问这个变量,这样程序会报告一个错误,并且无法运行哦。

从本质上来看,创建变量就是为即将到来的数据分配一块内存,用于存储这个数据。同时我们将这块内存的地址与你自定义的变量名相对应,让你能够“叫名字”这种简单的方式去访问这个数据,而不是去记住这个数据的地址去访问这个数据。就好像,你是更愿意“孙悟空,我叫你一声你敢答应吗?”这样叫一个人,还是“东胜神洲傲来国花果山水帘洞第一洞口101室住着的猴子,我叫你一声你敢答应吗?”这样呢?

从代码上来看,我们可以这样去声明一个变量,并给他一个初始值:

// <data_type> <variable_name> = <initial value>;
// Example:
int x = 1;
double GPA = 4.0;

计算机一开始本就是为了计算而生,那么知道了怎么声明一个变量,现在怎么做计算呢?计算机里的加和减还是**+-,而乘号和除号有点难打,于是就改用了星号*斜杠/**分别代表乘和除。

int y = x + 2;
GPA = GPA / y;

对了,你现在看到的等号=在Java中是赋值的意思,即将等号右边变量或算式结果的值赋值给等号左边的变量。注意这和我们小学就学过的方程或函数可不一样。比如x = 2*x - 1的结果并不是解方程得到的x = 1,而是先把等号右边的值算出来重新赋值给x,即先用x原来的值乘2再减1,再将这个值赋值给x,于是x得到了一个新的值。

2 八种基本数据类型

光会分配“小房子”可不行,你还得知道什么样的“数据访客”需要什么样的“小房子”,也就是它们的数据类型(data type)。在Java中,总共有8种基本数据类型(primitive data type)。一看有基本的数据类型就知道还有不基本的,先告诉你们,String这种类型就是不基本的,具体的咱们下次再提。

整型

主要用来存储整数,一共有四种:

  1. byte类型能存储 -2的7次方~2的7次方-1 之间的所有整数,-128到127
  2. short类型能存储 -2的15次方~2的15次方-1 之间的所有整数,大概是3.2万
  3. int类型能存储 -2的31次方~2的31次方-1 之间的所有整数,int是最常用的整型数据类型,大概是21亿
  4. long类型(长整型)能存储 -2的63次方~2的63次方-1 之间的所有整数,比int所需的空间更大,为了节省内存,一般都使用int,但是当int范围不够存储不了的时候还是得靠long咯!

思考1:这些类型所能存储的数据的范围有什么规律?为什么会有这种规律呢?

思考2:如果有在long的范围之外的整数,我们该如何存储呢?

浮点型

主要用来存储非整数,一般达不到完全精确,甚至连有限小数乘整数,乘着乘着就丢了精度。主要有以下两种:

  1. float单精度浮点类型,精度较低
  2. double类型,顾名思义,双精度浮点类型,虽然占用内存是float的两倍,但是更加精确。在这个内存足够大的时代,double类型已经成为了人们最常用的浮点型数据类型了

布尔型

就一种,也就是boolean布尔值,能存储的值也只有两种:truefalse

判断表达式的结果类型就是布尔值。为了声明一个boolean类型的变量并存储真值true,我们需要这样写:

boolean isLeapYear = true;

字符型

计算机里可不能只有数字,为了能正常显示字符,我们拥有了字符型char,用于存储单个的字符。为了声明一个char类型的变量并存储字符**'?'**,我们需要这样写:

char questionMark = '?';

在理解了八种基本类型之后,我们就可以给不同的数据住适合它们住的小房子啦。

3 直接量

直接量是程序中直接使用的数据值。

程序中直接出现的整数值默认为int类型,出现的浮点数值默认为double类型,这也是为什么这两种类型成为相应数据大类的主流的原因了。另外,boolean类型只有两种直接量true和false。char类型的直接量需要用单引号包住相应的单个字符

对于long类型的直接量,我们需在该数的末尾加上一个L或l(字母表第12个字母):

long l = 123198797492L;

对于float类型的直接量,我们需在该数的末尾加上一个F或f

float f = 100.2f;

虽然String类型不是基本类型之一,但是它的直接量用的非常多,所以在这里也有必要提上一嘴。上一课见到的Hello World示例程序中就出现了,我们需要用双引号包住相应的字符串

String s = "This is the end of this lesson!";

4 标识符

看起来很官方,但其实**标识符(identifier)**就是程序出现的事物的名字。比如上一part出现的xyGPAisLeapYearquestionMark这些变量名都是标识符。之所以要把这个拿出来讲就是想要说说标识符需要遵循的规则,通俗地说,不是所有东西都可以当成标识符的:

  1. 要求是字母、数字、下划线_和美元符号$构成的字符序列
  2. 但不能由数字开头
  3. 不能是truefalsenull
  4. 不能是保留字(如publicclassstaticintdouble等等,这个我们多学一些之后再总结吧,现在你就要知道,打出来在IDE里会变色的基本都是保留字哦~),你可以想象一下,如果int也可以作为变量名的话,这会与声明一个int类型的变量所使用的int产生冲突,程序将无法识别你是要访问变量还是要声明一个int类型的变量,所以正是为了避免这些歧义,我们才不能把这些保留字作为标识符使用。

总而言之,这就是希望你们不要瞎给变量起名。像我们人类,就不要取名出一些谐音梗了(手动狗头)。

附一些想说的话

啊哈磊老师是我的编程启蒙老师之一。他所写的生动形象的《啊哈C语言》是我的第一本编程书。这本书一定影响了现在的我,它时刻告诉我,要把编程知识讲的通俗易懂,尤其是启蒙阶段时,是需要这些生动的比喻的。我想,我现在所受的“关注”,一定离不开老师当年的教导对我潜移默化的改变。