作者:Flyingis
前段时间到书店抱了几本书回来,虽说网上有很多电子版的资料,但有时候觉得一些比较经典、自己比较喜欢的书籍还是有必要捧在手上细读的,《Java Puzzlers》就是其中之一,没事的时候就喜欢拿出来翻翻,怕自己像看新闻报纸一样看过就淡忘了,还是略作笔记让自己多份思考。
软件开发人员无论最初是从哪种语言开始学习的,首先都要掌握该语言的编程基础,例如语句、表达式、变量、数据类型、运算符、字符串等等,这些基础性的知识简单,但细节却比较繁琐,不同的编译器也会有不同的编译规则。以前寝室有同学考过的全国计算机等级考试二级C语言的试题中,语言的础规则是出题者最热衷的题形之一,曾经也觉得出题者无聊,只重理论不看实际,毕竟一些表达方法和书写格式可以通过规范来约束简化,但是作为一名程序员,一个专业的开发人员,应该了解自己所使用语言的基础规则,有时候一些程序的BUG就是存在于这些不起眼,或是自己认为应该没有问题的地方。
Java语言的表达式和C/C++比较相近,但也存在一些差异,这些差异不仅仅是那些看得见的差异,还有隐性的,例如相同的表达式,编译的规则不同。因此,我们需要理解Java表达式的一些基础性知识,加深认识。
1. 要精确表达一个浮点型变量,应该使用BigDecimal对象来构造这个实例,使用float或double在一般情况下只是提供了在一定精度范围下的一种近似,不能产生精确的结果。常用的数据库中都有与BigDecimal相对应的数据类型,有的更为详细。
2. 对于 long value = 30 * 300 * 3000 * 3000; 来说,long类型可以完整保存右边表达式计算的结果,但是右边表达式的计算是按照int类型进行的,只有当右边表达式计算完成后才会转换为long类型,在计算过程中,右边表达式的值就已经超出int范围,因此会出现计算溢出。
3. 通常我们使用最多的是十进制计算,和十进制不同的是,当十六进制或八进制常量的最高位被置位时,该常量是负值。
4. 注意数据类型之间的相互转换(特别是char类型和其他类型间的转换),以及三目运算符的第二和第三操作数类型不一致的情况处理。
5. 在C/C++中,操作符的操作数是从右向左计算,Java中相反。
6. 复合赋值操作和简单赋值操作在一般情况下是相同的,例如 x *= y 和 x = x * y ,但是当x和y类型不同时情况有所变化,例如当x为short类型,y为double类型时,x *= y的结果虽然和想象的有些出入,至少可以编译通过,但后者赋值却是非法的。
大家可以继续补充……
前段时间到书店抱了几本书回来,虽说网上有很多电子版的资料,但有时候觉得一些比较经典、自己比较喜欢的书籍还是有必要捧在手上细读的,《Java Puzzlers》就是其中之一,没事的时候就喜欢拿出来翻翻,怕自己像看新闻报纸一样看过就淡忘了,还是略作笔记让自己多份思考。
软件开发人员无论最初是从哪种语言开始学习的,首先都要掌握该语言的编程基础,例如语句、表达式、变量、数据类型、运算符、字符串等等,这些基础性的知识简单,但细节却比较繁琐,不同的编译器也会有不同的编译规则。以前寝室有同学考过的全国计算机等级考试二级C语言的试题中,语言的础规则是出题者最热衷的题形之一,曾经也觉得出题者无聊,只重理论不看实际,毕竟一些表达方法和书写格式可以通过规范来约束简化,但是作为一名程序员,一个专业的开发人员,应该了解自己所使用语言的基础规则,有时候一些程序的BUG就是存在于这些不起眼,或是自己认为应该没有问题的地方。
Java语言的表达式和C/C++比较相近,但也存在一些差异,这些差异不仅仅是那些看得见的差异,还有隐性的,例如相同的表达式,编译的规则不同。因此,我们需要理解Java表达式的一些基础性知识,加深认识。
1. 要精确表达一个浮点型变量,应该使用BigDecimal对象来构造这个实例,使用float或double在一般情况下只是提供了在一定精度范围下的一种近似,不能产生精确的结果。常用的数据库中都有与BigDecimal相对应的数据类型,有的更为详细。
2. 对于 long value = 30 * 300 * 3000 * 3000; 来说,long类型可以完整保存右边表达式计算的结果,但是右边表达式的计算是按照int类型进行的,只有当右边表达式计算完成后才会转换为long类型,在计算过程中,右边表达式的值就已经超出int范围,因此会出现计算溢出。
3. 通常我们使用最多的是十进制计算,和十进制不同的是,当十六进制或八进制常量的最高位被置位时,该常量是负值。
4. 注意数据类型之间的相互转换(特别是char类型和其他类型间的转换),以及三目运算符的第二和第三操作数类型不一致的情况处理。
5. 在C/C++中,操作符的操作数是从右向左计算,Java中相反。
6. 复合赋值操作和简单赋值操作在一般情况下是相同的,例如 x *= y 和 x = x * y ,但是当x和y类型不同时情况有所变化,例如当x为short类型,y为double类型时,x *= y的结果虽然和想象的有些出入,至少可以编译通过,但后者赋值却是非法的。
大家可以继续补充……