Java 对计算顺序作出了特别的规定。其中,最简单的规则就是乘法和除法在
加法和减法之前完成。程序员经常都会忘记其他优先级规则,所以应该用括号明
确规定计算顺序。例如:
A = X + Y - 2/2 + Z;
为上述表达式加上括号后,就有了一个不同的含义。
A = X + (Y - 2)/(2 + Z);
3.1.2 赋值
赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制
到左边”。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。
但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性
的空间来保存右边的值。举个例子来说,可将一个常数赋给一个变量(A=4;),
但不可将任何东西赋给一个常数(比如不能 4=A)。
对主数据类型的赋值是非常直接的。由于主类型容纳了实际的值,而且并非
指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容复制到
另一个地方。例如,假设为主类型使用“A=B
”
,那么 B 处的内容就复制到 A。若
接着又修改了 A,那么 B 根本不会受这种修改的影响。作为一名程序员,这应成
为自己的常识。
但在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,
我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际
就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D
”
,那
么 C 和 D 最终都会指向最初只有 D 才指向的那个对象。下面这个例子将向大家阐
示这一点。
这里有一些题外话。在后面,大家在代码示例里看到的第一个语句将是
“package 03
”
使用的“package
”
语句,它代表本书第 3 章。本书每一章的第一
个代码清单都会包含象这样的一个“package
”
(封装、打包、包裹)语句,它的
作用是为那一章剩余的代码建立章节编号。在第 17 章,大家会看到第 3 章的所
有代码清单(除那些有不同封装名称的以外)都会自动置入一个名为 c03 的子目
录里;第 4 章的代码置入 c04;以此类推。所有这些都是通过第 17 章展示的
CodePackage.java 程序实现的;“封装”的基本概念会在第 5 章进行详尽的解释。
就目前来说,大家只需记住象“package 03
”
这样的形式只是用于为某一章的代
码清单建立相应的子目录。
为运行程序,必须保证在 classpath 里包含了我们安装本书源码文件的根目
录(那个目录里包含了 c02,c03c,c04 等等子目录)。
对于 Java 后续的版本(1.1.4 和更高版本),如果您的 main()用 package 语
句封装到一个文件里,那么必须在程序名前面指定完整的包裹名称,否则不能运
行程序。在这种情况下,命令行是:
java c03.Assignment
运行位于一个“包裹”里的程序时,随时都要注意这方面的问题。
下面是例子:
//: c03:Assignment.java
// Assignment with objects is a bit tricky.
评论