一、表达式
1.当对两个数值型数据进行运算时,运算的结果至少为int型;如果有一个级别比int型高,则运算结果的类型与类型级别高的相同——类型自动提升,是在运算前完成的。四则运算外加求余运算均遵循运算前类型自动提升规则。
2.开发程序时,尽量不要使用“+”操作符的数值正号的功能,会降低代码的可读性。
3.“+”也用于把两个字符串连接到一起。如果将数字与字符串组合连接到一起时,“+”会将数值作为字符串处理,执行字符串连接功能。Java程序中看到类似于””+i(其中i为数值型数据)这样的代码,其作用是将数值型转换为字符串。
4.“%”结果的符号,由左边的操作数决定。浮点数一样可以求余数。Java中,求余运算按如下步骤实现:
(1)求出参与运算两数的绝对值。
(2)用左边操作数的绝对值减去右边操作数的绝对值,得到差。
(3)如果差比右边操作数的绝对值大,就用差减去右边操作数的绝对值,得到新差。
(4)重复步骤(2),直至差比右边的操作数小,将差作为结果返回。
5.自增自减运算符并不进行类型自动提升。本书不建议在表达式内使用自增或自减运算符,会降低可读性。
6.“==”运算符不但可以将类型相同的值进行比较,类型不同的值只要具有可比性,也可以进行比较,所有的数值型值之间可以相互比较。对于8种基本数据类型而言,boolean型只能与boolean型比较,其他7种则可以相互比较。
7.Java中规定两个“NaN”相比返回false,任何数值与“NaN"进行大小比较永远返回false。
8.逻辑运算符,其操作数只能是boolean型。
9.没有特殊需要一般应该采用短路逻辑运算。
10.三元运算符:(<逻辑表达式>)?<结果表达式1> : <结果表达式2>,如果表达式1、2为引用类型,则永远都是对的(指语法是对的,因为结果表达式1和2如果为基本类型,则要求其类型是兼容的,即如果结果表达式1和2的运算结果类型不同,其值类型要可以相互转换,如果不能转换,则编译报错)。
11.对于三元运算符返回值类型与表达式1和2类型间的关系,对于基本数据类型,如果两个表达式类型不同,对int型以下(包括int型)的字面常量将尽量进行窄化,如果不能进行窄化,最后返回级别高的类型。
12.位运算允许对整数中的单个比特进行操作,具有类型自动提升功能,经过位运算的结果至少是int型。
13.移位运算也只能处理整型,具有类型自动提升功能。在移位前,Java系统首先把要移的位数与被移数的位数求余数,然后移动余数个位数。
14.Java中的赋值运算符有返回值,可以把a=b看作一个表达式,赋值表达式,返回值就是b的值。
15.常用数学工具包——java.lang.Math类,提供方法用于帮助执行基本数学函数的运算。
二、流程控制
1.Java中的分支语句有两种,if条件语句与switch多分支语句。
2.建议不论if语句要控制的是语句序列还是单个语句,均使用花括号。
3.else总是与离其最近的if配对。
4.switch只能用于检查相等的情况;switch语句圆括号中的表达式主要是基本类型表达式和枚举类型表达式,如果基本类型的表达式,则要求其返回值类型必须是int兼容型的(byte、short、char以及int4种,byte、short、char可以自动提升转换为int型)。
5.case表达式必须是常量,字面常量或final的变量。
6.switch根本的执行流程为,switch语句将判断表达式的值与case后面表达式的值进行匹配,找到匹配的case,从此case开始执行,若没有匹配的case但有default,则从default开始执行,直至遇到break语句或者switch语句结束为止。
7.Java中并没有规定default与其他case之间的顺序,可以将其放在任何位置,但是为了增强代码的可读性,一般放在最后。最后一个break语句可以不写,但是为了提高可读性,一般都写上。
8.while循环适用于不知道代码需要被重复的次数,但有明确的终止条件的循环流程。
9.若明确知道循环体需要执行的次数,则使用for循环是最佳选择。
10.for循环的初始化表达式可以声明及初始化一个或多个相同类型的变量,一般是用作循环控制,其作用域为循环体、条件表达式和更新语句列表;条件表达式最多只能有一个,如果没有,相当于表达式永远为true;更新语句列表在每次循环的最后执行,可以写任何语句,并且可以写多个语句,在这部分用逗号作为语句分隔符,而不是分号。
11.Java中break语句有两个用法:在switch语句中表示一个case的结束,退出switch;作为循环控制语句,在循环体中表示退出循环。如果嵌套了多层循环,break跳出的是离其最近的一层循环。如何处理在内层循环使用中使用break跳出外层循环的问题,这时就需要用到标号语句。声明一个标号的语法为“标号名:”,标号名要满足Java标识符的命名规则。可以对内、外多层循环同时使用标号,但在同一个作用域中,标号的名称不能相同。
12.Java中有goto关键字,但是只是把goto作为关键字保留,其并不是一个语句,不能出现在源代码中。
13.使用continue与循环可以很方便地编写出把一个集合中不满足条件的元素去掉的逻辑,有时称为“反逻辑”。在很多情况下,正逻辑如果不容易表达,则往往反逻辑简单。