三、运算符

Java基 本 的 运 算 符 按功能分有 下 面 几 类 :

1.算 术 运 算 符 (+,-,*,/,%,++,--) Java对 加 运 算 符 进 行 了 扩 展 ,使 它 能 够 进 行 字 符 串 的连 接,如 "abc"+"de",得到 串 "abcde"。与 C、 C++不 同 ,对 取 模 运 算 符 %来 说 ,其 操 作 数 可 以为浮点 数 , 如37.2%10=7.2。i++与 ++i的 区 别:i++在 使 用 i之 后 ,使 i的 值 加 1,因 此 执 行 完 i++后 ,整 个 表达式的 值 为 i,而 i的 值变 为 i+1;++i在 使 用 i之 前 ,使 i的 值 加 1,因 此 执 行 完 ++i后 ,整 个 表达式和 i的 值 均 为 i+1。

2.关 系 运 算 符 (>,<,>=,<=,==,!=)该运算符的特点是:运算完的结果,要么是true,要么是false。Java中 ,任 何 数 据 类 型 的 数 据 (包 括 基 本 类 型 和 组 合 类 型)都可 以 通 过 ==或!=来 比 较 是 否 相 等 (这 与 C、 C++不 同 )。关 系 运 算 符 用 来 比 较 两 个 值 ,返 回 布 尔 类 型 的值true或 false,而不是C、C++中 的 1或 0。

3.布 尔 逻 辑 运 算 符 (& | ^ ! && ||)

逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。

&: 只有两边都为true结果是true。否则就是false。

|:只要两边都为false结果是false,否则就是true

^:异或:和或有点不一样。

两边结果一样,就为false。

两边结果不一样,就为true.

& 和 &&区别: & :无论左边结果是什么,右边都参与运算。

&&:短路与,如果左边为false,那么右边不参数与运算。

| 和|| 区别:|:两边都运算。

||:短路或,如果左边为true,那么右边不参与运算。

4.位 运 算 符 (>>,<<,>>>,&,|,^,~ ) 用于操作二进制位的运算符,如2*8 = 2<<3;。>>>(无符号右移)

5.赋 值 运 算 符 (= += -= *= /= %=)

6.条 件 运 算 符 ( ?:)

7.其 它 (包 括 分 量 运 算 符 · ,下 标 运 算 符 [],实 例 运 算 符 instanc eof,内 存 分 配运 算 符 new,强 制 类 型 转 换 运 算 符 (类 型 ), 方 法调 用 运 算 符 () 等 )

例子:对两个变量的数据进行互换。不需要第三方变量。

int a = 3,b = 5;-->b = 3,a = 5;

a = a + b; a = 8;

b = a - b; b = 3;

a = a - b; a = 5;

a = a ^ b;//

b = a ^ b;//b = a ^ b ^ b = a

a = a ^ b;//a = a ^ b ^ a = b;

Java 中共有 54 种运算符,按优先级可以分为 14 级:

优先级 操作符 含义 关联性 用法

----------------------------------------------------------------

1 [ ] 数组下标 左 array_name[expr]

. 成员选择 左 object.member

( ) 方法参数 左 method_name(expr_list)

( ) 实例构造 左 class_name(expr_list)

++ 后缀自增 左 lvalue++

-- 后缀自减 左 lvalue--

2 ++ 前缀自增 右 ++rvalue

-- 前缀自减 右 --lvalue

~ 按位取反 右 ~expr

! 逻辑非 右 !expr

+ 一元加 右 +expr

- 一元减 右 -expr

3 ( ) 强制转换 右 (type)expr

new 对象实例化 右 new type()

new type(expr_list)

new type[expr]

4 * 乘 左 expr * expr

/ 除 左 expr / expr

% 求余 左 expr % expr

5 + 加 左 expr + expr

- 减 左 expr - expr

+ 字符串连接 左 strExpr + strExpr

6 >> 有符号右移 左 expr >> distance

>>> 无符号右移 左 expr >>> distance

7 < 小于 左 expr < expr

<= 小于等于 左 expr <= expr

> 大于 左 expr > expr

>= 大于等于 左 expr >= expr

instanceof 类型比较 左 ref instanceof refType

== 等于 左 expr == expr

!= 不等于 左 expr != expr

8 & 整数按位与 左 integralExpr & integralExpr

& 布尔与 左 booleanExpr & booleanExpr

9 ^ 整数按位异或 左 integralExpr ^ integralExpr

^ 布尔异或 左 booleanExpr ^ booleanExpr

10 | 整数按位或 左 integralExpr | integralExpr

| 布尔或 左 booleanExpr | booleanExpr

11 && 逻辑与 左 booleanExpr && booleanExpr

12 || 逻辑或 左 booleanExpr || booleanExpr

13 ? : 条件运算 右 booleanExpr ? expr : expr

14 = 赋值 右 lvalue = expr

*= 乘赋值 右 lvalue *= expr

/= 除赋值 右 lvalue /= expr

%= 模赋值 右 lvalue %= expr

+= 加赋值 右 lvalue += expr

+= 字符串连接赋值 右 lvalue += expr

-= 减赋值 右 lvalue -= expr

<<= 左移赋值 右 lvalue <<= expr

>>= 有符号右移赋值 右 lvalue >>= expr

>>>= 无符号右移赋值 右 lvalue >>>= expr

&= 整数按位与赋值 右 lvalue &= expr

&= 布尔与赋值 右 lvalue &= expr

|= 整数按位或赋值 右 lvalue |= expr

|= 布尔或赋值 右 lvalue |= expr

^= 整数按位异或赋值 右 lvalue ^= expr

^= 布尔异或赋值 右 lvalue ^= expr

运算符不但有优先级,还有关联性。上表中关联性为"左"表示该表达式从左边开始进行运算;关联性为"右"表示该表达式从右边开始进行运算。

四、流程控制语句(If 、 switch、 do while、 while、 for、break、continue)

1. 当判断数据范围,获取判断运算结果boolean类型时,需要使用if;当判断固定个数的值的时候,可以使用if,也可以使用switch。但是建议使用switch,效率相对较高。

switch(变量){

case 值:要执行的语句;break;

default:要执行的语句;

}

工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了就执行哪个case后面的语句,如果没有相同的则执行default后面的语句;

细节:1):break是可以省略的,如果省略了就一直执行到遇到break 为止;

2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;

3):default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。

2.当某些语句需要执行很多次时,就用循环结构。

while和for可以进行互换。区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

3.break:作用于switch ,和循环语句,用于跳出,或者称为结束。break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。

4.continue:只作用于循环结构,继续循环用的。作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到