Think in java学习笔记-第3章 控制程序流程1

来源:互联网 发布:淘宝充话费开店 编辑:程序博客网 时间:2024/04/24 14:44

3章控制程序流程

就象任何有感知的生物一样,程序必须能操纵自己的世界,在执行过程中作出判断与选择。

第一部分:Java运算符

“=”==“!=” 能操作所有对象。

String类支持“+”“+=”

><>=<=,比较不适用于boolean类型。

其余运算符都只能操作基本数据类型Primitives)。

一、   赋值运算符:=

1.      赋值运算符(=),它的意思是取得右边的值,把它复制到左边。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性的空间来保存右边的值。

2.      对主(Primitives)数据类型的赋值。主类型容纳了实际的值,可将一个地方的内容复制到另一个地方。例如,假设为主类型使用“A=B”,那么B处的内容就复制到A。若接着又修改了A,那么B根本不会受这种修改的影响。

3.      对一个对象赋值,我们真正操作的是它的句柄。所以倘若从一个对象到另一个对象赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么CD最终都会指向最初只有D才指向的那个对象。Assignment.java

4.      扩展赋值运算符:

    a = a>>>b

    a >>>= b

>>>=

    a = a>>b

    a >>= b

>>=

    a = a<<b

    a <<= b

<<=

    a = a^b

    a ^= b

^=

    a |= b

    a &= b

    a %= b

    a /= b

    a *= b

    a -= b

    a += b

用法举例

    a = a|b

|=

    a = a&b

&=

    a = a%b

%=

/=

*=

-=

+=

运算符

    a = a/b

    a = a*b

    a = a-b

    a = a+b

等效的表达式

 

 

 

 

 

 

 

 

 

 

 

 

 


二、   算术运算符:+,―,*/%++,――

1.       整数除法会直接砍掉小数,而不是进位。

2.       前递增和前递减(如++A--A),会先执行运算,再生成值。后递增和后递减(如A++A--),会先生成值,再执行运算。

例:AutoInc.java

三、   关系运算符:><>=<=,==,!=

1.       关系运算符生成的是一个布尔Boolean)结果。它们评价的是运算对象值之间的关系。若关系是真实的,关系表达式会生成true(真);若关系不真实,则生成false(假)。

2.       检查对象是否相等

1)       ==和!=比较的是对象句柄。例:Equivalence.java

2)       equals()方法。 [Usagen1.equals(n2)]例:EqualsMethod.java

ü         不适用于主类型

注意:可以比较封装器类型和主类型和常数。

ü         当用equals()方法进行比较时,对类FileStringDate及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个实例;

ü         equals()的默认行为是比较句柄。要想比较对象必须重新实现它例:EqualsMethod2.java

ü         大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。

四、   逻辑运算符:&,|,!,^,&&,||

1.       只能应用于布尔值。不可将一个非布尔值当作布尔值在逻辑表达式中使用。

2.       逻辑运算符功能

-- 逻辑非               & -- 逻辑与         |  -- 逻辑或

^  -- 逻辑异或        &&-- 短路与          || -- 短路或

3.       短路:如果一个逻辑表达式的所有部分都不必执行下去,那么潜在的性能提升将是相当可观的。

&& -- 第一个操作数为假则不判断第二个操作数

||    --   第一个操作数为真则不判断第二个操作数

例:ShortCircuit.java

五、按位运算符:&|^~

1.       按位运算符允许我们操作一个整数主数据类型中的单个比特,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果.

2.       Java整数进制转换

ü               Java语言二进制数采用补码形式,数正负区分标志:符号位

ü               正数进制转换

Ø         十进制----二进制:除2取余、除尽为止

Ø         二进制----十进制:累加求和

ü               负数进制转换

Ø         十进制----二进制:

•取绝对值

•转换为二进制

•逐位取反

•加1

Ø         二进制----十进制

•减1

•逐位取反

•转换为十进制正数

•乘-1

六、   移位运算符:<<>>>>>

1.       移位运算符面向的运算对象也是二进制的。可单独用它们处理整数类型(主类型的一种)

2.       左移<<

ü                           将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0

ü                           "a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0

3.       带符号右移>>

ü                           将运算符左边的运算对象向右移动运算符右侧指定的位数。

ü                           "a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;

ü                           有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1

4.       无符号右移>>>

ü                           它使用了零扩展:无论正负,都在高位插入0。这一运算符是CC++没有的。

ü                           "a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0

5.       移位运算符性质

ü                           适用数据类型:byteshortcharintlong,对低于int型的操作数将先自动转换为int型再移位

ü                           对于int型整数移位a>>b,系统先将b32取模,得到的结果才是真正移位的位数

ü                           对于long型整数移位时a>>b ,则是先将移位位数b64取模

ü                           在进行无符号右移位时,也可能遇到一个问题。若对byteshort值进行右移位运算,得到的可能不是正确的结果(Java 1.0Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但零扩展不会发生,所以在那些情况下会得到-1的结果。

七、三元if-else运算符:布尔表达式 ? 0:1

1.       布尔表达式的结果为true,就计算0”,而且它的结果成为最终由运算符产生的值。但若布尔表达式的结果为false,计算的就是1”,而且它的结果成为最终由运算符产生的值。

八、     逗号运算符

Java里需要用到逗号的唯一场所就是for循环

九、字串运算符+

1.        "+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接

2.        注意:对于Java的早期版本,如果想通过加号连接字串,请务必保证第一个元素是字串。

十、   造型运算符