使用操作符时常犯的错误
2013-08-20 17:49
501 查看
使用操作符时一个常犯的错误就是,虽然你对一个表达式如何计算有点不确定,却不愿意使
用括号。这个问题在 Java 中仍然存在。
在 C 和 C++中,一个特别常见的错误如下:
while(x = y) {
//...
}
程序员很明显是想测试是否“相等”(==),而不是进行赋值操作。在 C 和 C++中,如果 y 是
一个非零值,那么这种赋值的结果肯定是 true,而这样便会得到一个无穷循环。在 Java 中,
这个表达式的结果并不是布尔值,而编译器期望的是一个布尔值。由于 Java 不会自动地将
int 数值转换成布尔值,所以在编译时会抛出一个编译期错误,从而有效地阻止了我们更进
一步地去运行程序。所以这个陷阱在 Java 中永远不会出现。(唯一不会得到编译错误的情况
是 x 和 y 都为布尔值。在这种情况下,x = y 属于合法表达式。而在前面的例子中,则可能
是一个错误。)
Java 中有一个与 C 和 C++中类似的问题,即使用按位与和按位或代替逻辑与和逻辑或。按
位与和按位或使用单字符(&或|),而逻辑与和逻辑或使用双字符(&&或||)。就象“=”和“==”
一样,键入一个字符当然要比键入两个简单。Java 编译器可防止这个错误发生,因为它不允
许我们随便的把一种类型当作另一种类型来用。
用括号。这个问题在 Java 中仍然存在。
在 C 和 C++中,一个特别常见的错误如下:
while(x = y) {
//...
}
程序员很明显是想测试是否“相等”(==),而不是进行赋值操作。在 C 和 C++中,如果 y 是
一个非零值,那么这种赋值的结果肯定是 true,而这样便会得到一个无穷循环。在 Java 中,
这个表达式的结果并不是布尔值,而编译器期望的是一个布尔值。由于 Java 不会自动地将
int 数值转换成布尔值,所以在编译时会抛出一个编译期错误,从而有效地阻止了我们更进
一步地去运行程序。所以这个陷阱在 Java 中永远不会出现。(唯一不会得到编译错误的情况
是 x 和 y 都为布尔值。在这种情况下,x = y 属于合法表达式。而在前面的例子中,则可能
是一个错误。)
Java 中有一个与 C 和 C++中类似的问题,即使用按位与和按位或代替逻辑与和逻辑或。按
位与和按位或使用单字符(&或|),而逻辑与和逻辑或使用双字符(&&或||)。就象“=”和“==”
一样,键入一个字符当然要比键入两个简单。Java 编译器可防止这个错误发生,因为它不允
许我们随便的把一种类型当作另一种类型来用。
相关文章推荐
- Flash AS3 使用Loader导入SWF时常会出现的空对象错误
- js参数使用时常犯的一个低级错误
- Retrofit 使用flatmap操作符时处理错误、异常
- 正确的使用抑制错误操作符
- 使用mongodb时常发生的几个错误
- Retrofit 使用flatmap操作符时处理错误、异常
- 使用Android studio写代码时常碰到的错误
- c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap
- Spring mvc使用注解@ResponseBody Ajax请求返回json报406错误
- 名称或代码在系统中已被使用" (错误代码:3604 E14H) Fdetail:列名'F3001'无效
- 使用ofstream输出数据时令人暴寒的错误!0A = 0D 0A?
- 【GoLang】GoLang 错误处理 -- 使用异常的思路进行处理
- 使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法
- python fabric模块使用错误
- IOCP使用时常见的几个错误
- 安装了dns且可以正常工作为什么还有"没有可以使用的"DNS服务器"的错误
- Java 程序员在写 SQL 时常犯的 10 个错误
- Provider使用遇到错误
- Ibatis批处理SqlMapClient使用不关闭,资源耗尽,死锁错误!