ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## [常见陷阱](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e5%b8%b8%e8%a7%81%e9%99%b7%e9%98%b1) 使用运算符时很容易犯的一个错误是,在还没搞清楚表达式的计算方式时就试图忽略括号`()`。在 Java 中也一样。 在 C++ 中你甚至可能犯这样极端的错误.代码示例: ~~~ while(x = y) { // ... } ~~~ 显然,程序员原意是测试等价性`==`,而非赋值`=`。若变量**y**非 0 的话,在 C/C++ 中,这样的赋值操作总会返回`true`。于是,上面的代码示例将会无限循环。而在 Java 中,这样的表达式结果并不会转化为一个布尔值。 而编译器会试图把这个**int**型数据转换为预期应接收的布尔类型。最后,我们将会在试图运行前收到编译期错误。因此,Java 天生避免了这种陷阱发生的可能。 唯一有种情况例外:当变量`x`和`y`都是布尔值,例如`x=y`是一个逻辑表达式。除此之外,之前的那个例子,很大可能是错误。 在 C/C++ 里,类似的一个问题还有使用按位“与”`&`和“或”`|`运算,而非逻辑“与”`&&`和“或”`||`。就象`=`和`==`一样,键入一个字符当然要比键入两个简单。在 Java 中,编译器同样可防止这一点,因为它不允许我们强行使用另一种并不符的类型。