第二节 常量
上一节讲解了变量的使用,本节我们来谈谈常量。常量在程序中较变量而言使用较少,但也非常重要。接着,我们接着上一节讲解数据类型,由于数据类型需要还需要一些底层知识,所以还需向下一点点。
常量讲解
上一节中,我们说变量是相对常量而言的,那么变量和常量都是什么呢?它们又有什么区别呢,其实啊,变量和常量在申明,使用上非常相似,不同是变量变量可以赋值多次,而常量只能赋值一次。另外,一个是常量,一个是变量,所以它们的申明方法也有一点点差别。下面看例子。
首先是一个变量的例子:
int i = 3;
System.out.println(i);
i = 5;
System.out.println(i);
上面的例子是一个关于变量的申明和使用的,没有任何可以解释的了,它运行完全没有问题,打印结果就是打印一个3和一个5。 下面看将变量i改为常量后的例子:
final int i = 3;
System.out.println(i);
i = 5;//报错,第二次赋值
System.out.println(i);
上文中第一行即申明一个常量,没错它和变量的区别就是仅在前面加一个关键字“final”。至于它的赋值方式和使用方式以及常量民命规则,则完全一样,这里不做过多解释。
数据类型进一步探讨
在上一节中,我们说基本数据类型共有4类8种,其中数值型数据类型就有5种(表整数的short、int、long和表小数的float、double),在这里我们介绍它们的区别。不过在这之前,我们还需了解数字在电脑种的表示(下面可能有点难,做好心理准备)。
电脑种的数据都是以存储设备的存储单元来表示的,以内存为例,它的存储单元是使用一个存储单元种有没有电表示它的数据(磁盘则是一个单位是南极或北极,光盘是有无凹槽...)。有电,我们称为高电平(大约5伏电压),没有电,我们称为低电平(0伏电压)。我们可以规定高电平为1,低电平为0(或反过来高电平为0低电平为1)。这就说明一个存储单元只能变表示两个数0和1,为了表示更多的数,同时基于存储单元只有两个极端特点,计算机科学家发明了基于二进制的数字表示法。
在探讨二进制前,我们去探索下我们所熟悉的10进制,看看有没有什么启发。
10进制是使用数字0,1,2,3,4,5,6,7,8,9这10个符号来表示自然界种各种数字的,因其没有10(读shi)的特殊表示符号,而是使用10(读yi,ling)这样的组合符号来表示。且每到9的下一个数字进1。如
1,2,3,4,5,6,7,8,9 下一个数是 : 10(读shi)
这个10(读shi)是怎么的来的呢?它由两步得到:
1. 将当前数字9清零
2. 将它前面的数字加1(即进1)
而这样做的条件是每逢9的下一个数字产生即10(读shi)的产生。这就是满10进1的特性了。
因为数字前面增加0我们认为是没有意义的比如9,09,009这三个数字都表示9,所以我们可以认为上面的10是有09变来的。它的9变0,而0加1变1得到10。同理得到19->20, 29->30...99->100...的变法。
通过上面的规律我们发现在不同的位置一个数字符号是表示不同的含义的,比如001,010,100这三个数字它们就分别表示1(读yi),10(读shi),100读(读yibai)。我们也知道在数学中是将数字葱油往左数不同的位置分别叫:个位、十位、百位、千位...
同样在二进制中所有的方法都适用,第一数字满2进1是在前面的数字加1,第二不同的位置表示不同的数字大小。例如:
| 十进制 | 二进制 | 说明 |
|---|---|---|
| 0 | 0 | |
| 1 | 1 | |
| 2 | 10 | 第一个数满2,所以第一个数清零,二第个数加1 |
| 3 | 11 | 第一个数继续加1,对应十进制中的10变11的过程 |
| 4 | 100 | 第一个数满2,所以进1导致第二个数也满2所以再向第三个数进1,类比于10进制中99变100的过程 |
| 5 | 101 | 第一个数加1 |
| 6 | 110 | 第一个数满2进1 |
| 7 | 111 | 第一个数加1 |
| 8 | 1000 | 三次满二进1 |
| 9 | 1001 | 第一个数加1 |
| 10 | 1010 | 第一个数满2进1 |
我们上面还提到了不同位置表示不同的数,在二进制中也有,只是还没有一个特殊的名字,但是表示一个特定的值。
| 位置(从右向左数) | 含义 | 实例 | 实例的值 |
|---|---|---|---|
| 第1个数 | 1表示1,0表示0 | 1 | 1 |
| 第2个数 | 1表示2,0表示0 | 10 | 2 |
| 第3个数 | 1表示4,0表示0 | 100 | 4 |
| 第4个数 | 1表示8,0表示0 | 1000 | 8 |
| 第5个数 | 1表示16,0表示0 | 10 00 | 16 |
| 第6个数 | 1表示32,0表示0 | 100 000 | 32 |
| 第7个数 | 1表示64,0表示0 | 1 000 000 | 64 |
| 第8个数 | 1表示128,0表示0 | 10 000 000 | 128 |
| 第9个数 | 1表示256,0表示0 | 100 000 000 | 256 |
| 第10个数 | 1表示512,0表示0 | 1 000 000 000 | 512 |
| 第10个数 | 1表示1024,0表示0 | 10 000 000 000 | 1024 |
| ... | ... | ... | ... |
有了二进制的概念后,我们继续探讨计算机中的数我们知道了1位存储单元只能表示两个数,为了表示多个数,就使用多个存储单元来表示。所以在计算机中称一个存储单元为1bit,而称8个存储单元为1Byte(字节)。称1024Byte为1KB。1024KB为1MB,1024MB为1GB...
有了Byte的概念后,我们可以说int,short,long它们的区别是:short只有两个字节长度,就是使用16个存储单元表示一个数,可表示的范围为-32768-32767共65536个数,int则有4个字节长度。可表示的范围为-2147483648-2147483647这么多数,几乎足够日常使用,而long则由8个字节组成,可表示更大范围的数字。
| short | int | long |
|---|---|---|
| 2Byte | 4Byte | 8Byte |
| -32768-32767 | -2147483648-2147483647 | 更大 |
在计算机中,没有小数点这个符号表示,默认认为小数点固定在2进制的最右面即整数,所以整数也成定点数。而当小数点的位置不确定时称这个数字为浮点数,即自然中的小数,简称float。而double则成为双精度浮点数,它们的区别时float使用4个字节表示,而double使用8个字节表示,可以表达更加精确的数字。
~完~
很遗憾,本节学完没有什么可以立即表现出来的东西,且本节相对抽象复杂,如果无法理解则可先看一边,日后慢慢理解。