From 093fa2ac6afff9c97d06e1224caa146af0b14d15 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Tue, 26 Mar 2019 09:27:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=AE=97=E7=AC=A6=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/04-Operators.md | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/book/04-Operators.md b/book/04-Operators.md index 8a114a7..598f400 100644 --- a/book/04-Operators.md +++ b/book/04-Operators.md @@ -6,23 +6,52 @@ >运算符操纵数据。 -Java 是从 C++ 的基础上发展而成的。因此,对于 C/C++ 程序员来说,Java 的运算符并不陌生。当然,Java 还做了一些改进和简化。如果你已了解 C 或 C++,大可以跳过本章和下一章,直接阅读 Java 和 C/++ 不同的地方。 +Java 是从 C++ 的基础上做了一些改进和简化发展而成的。对于 C/C++ 程序员来说,Java 的运算符并不陌生。如果你已了解 C 或 C++,大可以跳过本章和下一章,直接阅读 Java 与 C/C++ 不同的地方。 -当然,如果你认为自己理解这两章还有些艰难,那么可以先了解下 *Thinking in C* 再开始后面的工作。 这本书现在可以在 [www.OnJava8.com](http://www.OnJava8.com]) 上免费下载。它的内容包含音频讲座、幻灯片、练习和解决方案,专门用于帮助你快速掌握学习 Java 所需的基础知识。 +如果理解这两章的内容对你来说还有点困难,那么我推荐你先了解下 *Thinking in C* 再继续后面的学习。 这本书现在可以在 [www.OnJava8.com](http://www.OnJava8.com]) 上免费下载。它的内容包含音频讲座、幻灯片、练习和解决方案,专门用于帮助你快速掌握学习 Java 所需的基础知识。 ## 使用说明 -运算符接受一个或多个参数并生成新值。这个参数与普通方法调用的形式是不同的,但效果是相同的。加法 `+`,减法 `-`,乘法 `*`,除法 `/` 以及赋值 `=` 在任何编程语言中的工作方式都相同。所有运算符都从其操作数中生成一个值。此外,一些运算符会更改操作数的值。 +运算符接受一个或多个参数并生成新值。这个参数与普通方法调用的形式是不同的,但效果是相同的。加法 `+`,减法 `-`,乘法 `*`,除法 `/` 以及赋值 `=` 在任何编程语言中的工作方式都是类似的。所有运算符都能根据自己的运算对象生成一个值。除此以外,一个运算符可改变运算对象的值,这叫作“副作用”(**Side Effect**)。算符最常见的用途就是修改自己的运算对象,从而产生副作用。但要注意生成的值亦可由没有副作用的运算符生成。 + +几乎所有运算符都只能操作基本类型(*Primitives*)。唯一的例外是`=`、`==`和`!=`,它们能操作所有对象(这也是令人混淆的一个地方)。除此以外,**String** 类支持`+`和`+=`。 -修改操作数的运算符最常见的用途是生成副作用,但请记住,生成的值可供你使用,就像在没有副作用的运算符中一样。几乎所有的操作符都只使用原语。例外是`=`、`==` 和 `!=`,用于所有对象(并且是对象的混淆点)。此外,String 类而也支持 `+` 和 `+=`。 ## 优先级 +运算符的优先级决定了存在多个运算符时一个表达式各部分的计算顺序。Java 对计算顺序作出了特别的规定。其中,最简单的规则就是乘法和除法在加法和减法之前完成。程序员经常都会忘记其他优先级规则,所以应该用括号明确规定计算顺序。代码示例: + +```JAVA +// operators/Precedence.java +public class Precedence { + + public static void main(String[] args) { + int x = 1, y = 2, z = 3; + int a = x + y - 2/2 + z; // [1] + int b = x + (y - 2)/(2 + z); // [2] + System.out.println("a = " + a); + System.out.println("b = " + b); + } +} +``` + + 输出结果: + +``` + a = 5 + b = 1 +``` + +这些语句看起来大致相同,但从输出中我们可以看出它们具有非常不同的含义,具体取决于括号的使用。 + +我们注意到,在 `System.out.println() ` 语句中使用了`+`运算符。 但是在这里 `+`代表的意思是字符串连接符。当编译器看到字符串的后面连着一个非`+`连接的非字符串,那么其将会试图去转换这个非字符串成为字符串。上例中的输出结果说明了 a 和 b 都已经被转化成了字符串。 + + ## 赋值