<JAVA编程思想第四版>——控制程序流程
Java 里,我们利用运算符操纵对象和数据,并用执行控制语句作出选择
3.1 JAVA运算符
运算符都能根据自己的运算对象生成一个值。此外,一个运算符可改变运算对象的值,叫“副作用”。
几乎所有运算符都只能操作“基本类型"。但是“=”、“ ==”和“ !=”也能够操作所有对象。
“ =”、“ ==”和“ !=”能够操作String对象。
3.1.1 优先级
最好用括号明确知名优先级顺序
3.1.2 赋值(=)
基本数据类型直接,举例:A=B 将B处的内容复制到A处,若此时修改A的内容那么B不受影响。
对象赋值比较特殊,举例:C=D 因为C跟D都是保存的对象的句柄(或者说地址),所以赋值完毕后C跟D都指向了最初D指向的对象。
3.1.3 算术运算符
加号(+)、减号(-)、除号(/,整数除法会直接砍掉小数,而不是进位)、乘号(*)以及模数(%,从整数除法中获得余数)
3.1.4 自动递增和和递减
对于前递增和前递减(如++A 或--A),会先执行运算,再生成值。
对于后递增和后递减(如A++或 A--),会先生成值,再执行运算。
3.1.5 关系运算符
小于( <)、大于( >)、小于或等于( <=)、大于或等于( >=)、等于( ==)以及不等于( !=)
=、!=适用于所有基本类型,其它比较不适用于boolean类型
=、!=也应用于所有对象
public class Equivalence { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); System.out.println(n1 != n2); } }
输出结果为:false、true
原因为:=、!=比较的是对象的句柄,若想比较对象的内容应该使用equals()方法。当创建一个新类,euqals()方法默认比较的是对象的句柄,如果想要比较对象的内容请重写equals()方法
3.1.6 逻辑运算符
AND(&&)、OR(||)以及 NOT(!) 只能够应用于布尔值,而且不可将一个非布尔值当作布尔值在逻辑表达式中使用。
短路:如果一个逻辑表达式的所有部分都不必执行下去,那么潜在性能提升是十分可观的。
3.1.7 按位运算符
按位运算符允许我们操作一个整数主数据类型中的单个“比特”,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。
3.1.8 一味运算符
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。
<<、>> 注意补0的方式
3.1.9 三元运算符
布尔表达式 ? 值 0:值 1
三元运算符虽然很简洁,但是但假若您打算频繁用它,还是要先多作一些思量—— 它很容易就会产生可读性极差的代码。
3.1.10 逗号运算符
应用场景:for循环
3.1.11 字串运算符+
3.1.12 运算符常规操作规则
int x = 1; int y = 2; while(x = y){ }
上述代码编译失败,因为x是Int类型,java中无法从int转换为boolean
3.1.13 造型运算符
为进行一次造型,要将括号中希望的数据类型(包括所有修改符)置于其他任何值的左侧。比如:long l2 = (long)200;
既可对一个数值进行造型处理,亦可对一个变量进行造型处理。
缩小转换需要用户明确指明;而放大转换则不必明确造型。
Java 允许我们将任何主类型“造型”为其他任何一种主类型,但布尔值( boolean)要除外,后者根本不允许进行任何造型处理。“类”不允许进行造型。
1.39e-47f 的真正含义是1.39× 10 的-47次方。
表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。
除 boolean 以外,任何一种主类型都可通过造型变为其他主类型。同样地,当造型成一种较小的类型时,必须留意“缩小转换”的后果。否则会在造型过程中不知不觉地丢失信 息。
3.2 执行控制
3.2.1 真和假
Java 不允许我们将一个数字作为布尔值使用
3.2.2 if-else
3.2.3 反复
while(布尔表达式)先计算表达式的值,然后执行语句;
3.2.4 do-while
do while(表达式)至少先执行一遍语句,然后判断表达式的值
3.2.5 for循环
for 循环在第一次反复之前要进行初始化。随后,它会进行条件测试,而且在每一次反复的时候,进行某种形式的“步进”( Stepping)
只有for 循环才具备在控制表达式里定义变量的能力,而且for语句中可以定义多个变量。 for(;;)类似于while(true)
3.2.6 中断和继续
switch(整数选择因子):{ case 整数值1:语句;break; case 整数值2:语句;break; case 整数值3:语句;break; default:语句; }
整数选择因子必须是Int或者char类型。对于非整数类型,必须用一系列if语句。