运算符可以是一元、二元或三元的。

一元运算符有1个操作数。例如,递增运算符"++"就是一元运算符。

二元运算符有2个操作数。例如,除法运算符"/"有2个操作数。

三元运算符有3个操作数。例如,条件运算符"?:"具有3个操作数。

运算符的行为还可能因所提供的操作数的数量而异。减法运算符"-"既是一元运算符又是二元运算符。对于减法运算符,如果只提供一个操作数,则该运算符会对操作数取反并返回结果;如果提供两个操作数,则减法运算符返回这两个操作数的差。例如:


  1. // 将减法运算符用作一元运算符(取反运算符)  
  2. trace(-5); // -5  
  3. // 将减法运算符用作二元运算符  
  4. trace(9-3); // 6  



 Java 语言支持如下运算符:

  算术运算符:  +,-,*,/,%,++,--

  赋值运算符 =

  关系运算符:  >,<,>=,<=,==,!=  instanceof

  逻辑运算符:  &&,||,!

  位运算符:  &,|,^,~ , >>,<<,>>>(了解!!!)

  条件运算符 ?:

  扩展赋值运算符:+=,-=,*=,/= 


一元运算符

int a = 3;

       int b = a++;  //执行完后,b=3。先给b赋值,再自增。

       int c= ++a;   //执行完后,c=5。先自增,再给b赋值

 

注意:java中的乘幂处理:

       int a = 3^2;    //java中不能这么处理, ^是异或符号。

       double b = Math.pow(3,2);

Math类提供了很多科学和工程计算需要的方法和常数。



二元运算符


整数运算:

如果两个操作数有一个为Long, 则结果也为long

没有long时,结果为int。即使操作数全为shot,byte,结果也是int.

浮点运算:

         如果两个操作数有一个为double,则结果为double.

         只有两个操作数都是float,则结果才为float.


取模运算

其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.000000004

要点:

  负数%负数=负数;
  负数%正数=负数;
  正数%负数=正数;

 

注:一般都是正整数运算,不用考虑这么细!



布尔逻辑表达符

逻辑与:&&和&,逻辑或:||和|,逻辑非:!。

逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。

逻辑与只要有一个为false, 则直接返回false.

逻辑或只要有一个为true, 则直接返回true;

boolean c = 1>2&&2>(3/0);



位运算符

(了解)

         ~-- 取反          &   -- 按位与          

         |  -- 按位或  ^  -- 按位异或  

         <<:左移运算符,>>:右移运算符 >>>:无符号移位运算符

 

右移一位相当于除2取商。

左移一位相当于乘2。

       int a = 3*2*2;

       int b =3<<2;  //相当于:3*2*2;

       int a = 12/2/2;

       int b = 12>>2;



扩展运算符

运算符

用法举例

等效的表达式

+=

    a += b

    a = a+b

-=

    a -= b

    a = a-b

*=

    a *= b

    a = a*b

/=

    a /= b

    a = a/b

%=

    a %= b

    a = a%b


字符串连接符


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


       int c = 12;

       System.out.println("c="+ c);



三目条件运算符(三元运算符)


三目条件运算符,语法格式:

x ? y : z

其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。

举例:

       int score = 80; int x = -100;

score < 60 ?"不及格" :"及格";

       intflag = x > 0 ? 1 : (x == 0 ? 0 : -1);

       System.out.println("type= " +type);

       System.out.println("flag= "+flag);

运算符优先级的问题


R to L

.   ( )   { }   ;   ,
++ --   ~ ! (data type)

L to R

* / %

L to R

+ -

L to R

<< >> >>>

L to R

<  >  <=  >=  instanceof

L to R

== !=

L to R

&

L to R

^

L to R

|

L to R

&&