第二章 Java语言基础知识
17、(P71) Java基本数据类型与C++基本数据类型的本质区别是,各类型所占内存空间的比特位数与具体的硬软件平台无关。也就是说,各种基本数据类型的长度,不管是在哪种计算机上,也不管是在哪种操作系统平台上,都是一样的。
18、(P71) Java没有无符号的整数类型,即字节也好,各种整数型也好,都是带符号的。
19、(P72) 字符型数据采用的是Unicode码。其格式是'\u$$$$'($表示一个16进制数)。ASCII/Ansi码是Unicode码的一个子集,即高位字节为零的Unicode码。(P74) 在ASCII字符集合中,代码值为0 -- 0x1F的就是控制代码。
20、(P72) 布尔型数据只能取两个值,即true和false,布尔值和整数之间是不能互相转换的。要想把布尔值转化为1 和 0 的整数值,可以采用如下语句:int i = (b == true)?1:0 ; ( 注: b 为bool型变量 )
21、(P73) 与C++类似,以数字0开头的整数为八进制整数,以数字0x或0X开头的整数为十六进制整数。
22、(P74) 字符串是用双引号包围的一串字符。凡是字符串常量都有一个结束符'\0',它是由系统自动在其尾部追加的。Java可以用+把两个或两个以上的字符串直接连接起来构成一个字符串。
23、(P75) Java变量分成两种类型:自动变量和成员变量,没有全局变量。所有的自动变量在参加运算和操作前,都必须给它赋值,否则将产生编译错误。(P130) 成员变量若未对它进行初始赋值,系统会自动对其进行初始化赋值,比如,byte、int、short初始化为0,long初始化为0L,char初始化为'\u0000',double初始化为0.0d,float初始化为0.0f, boolean 初始化为false, 对象引用初始化为null。
24、(P76) 自动变量是由系统在内存的堆栈区为它分配内存空间的。它的作用域从块语句内的定义点开始到块语句的右大括号结束,其存在期也是在定义点开始创建到块语句的右大括号撤销。因此,它的作用域和存在期是完全一致的。一旦离开该作用域,该变量变得毫无意义,它所占用的内存空间立即释放被系统回收。
25、(P76) 外部块定义的自动变量在内部块中仍然可以使用,但与C、C++不同的是在内部块中不能重新定义该变量。
26、(P78 - P79) 将一个实型数据赋给一实型变量时,它是以指数形式(科学计数法)存在该变量的内存空间里的。float型变量的精度只能确保十进制前7位有效数字是准确的,double型变量的精度只能确保十进制数前16位有效数字是准确的。
27、(P85 - P86) 位运算是把运算量看成二进制代码值并变成补码形式,然后对每个相应的二进制位进行按位运算。
28、(P86 - P87) “逐位与”运算可以把一个二进制数的指定位变为0,“逐位或”运算可以把一个二进制数的指定位变为1,“逐位非”运算可以把一个二进制数的所有位都翻转,“逐位异或”运算可以把一个二进制数的指定位翻转。将一个变量与本身异或,其结果是将变量清零。
29、(P87 - P88) 移位运算符(<< 、>> 、>>>):
<< 称为 左移运算符,右端出现的空位(最低位)补入0,而移出左端的最高位则丢掉。在该整数的数据类型所能表示的数值范围内,把某整数向左移动一位,则等于将该整数乘以 2,左移 n 位相当于乘以 2 的 n 次方。
>> 称为 算术右移运算符,它左边的空位是补入符号位,即正整数补入 0 ,负整数补入 1 ,移出右端的最低位则丢掉。将该整数右移 n 位,相当于将该整数除以 2 的 n 次方。
>>> 称为 无符号右移运算符或逻辑右移运算符,不管是正整数还是负整数它给左端的空位总是补入0,称为“零扩展”, 移出右端的最低位也是丢掉。
30、(P88) 关于“逻辑右移运算符”, 有以下注意事项:Java中对byte、short的数据进行各种移位操作时,系统都自动地把它们转换成int型数据后,再进行各种移位操作,最后截断成运算量的数据类型作为运算结果。若移动位数超过现成byte、short数值所允许移动的位数,则得到的结果不一定是正确的。
31、(P91) 只有数据长度被扩宽的类型转换才能自动进行。扩宽转换方向如下所示:byte -> short -> int -> long -> float -> double, char -> int -> long -> float -> double 。若是非扩宽的类型转换,必须使用强制类型转换。格式为: (数据类型)表达式 。Java允许除布尔型以外的任何基本数据类型,强制转换成其他任何一种基本数据类型。不能使用强制类型转换把布尔型转换成其它数据类型,只能想其它方法实现(参见第20条)
32、(P99) for语句: for语句的格式为 for(;;), 其中第一分量通常用来设置循环的起始条件,但与C++不同,该块变量的作用域不是在for语句的循环体外,而是在循环体内。因此,连续使用for语句如下 for(int i=0;i < 循环次数; i++) 也不会造成循环变量 i 的重复定义。