黑马程序员 基础之运算符

来源:互联网 发布:矢量图软件coreldraw 编辑:程序博客网 时间:2024/05/22 01:34

------- android培训、java培训、java学习型技术博客、期待与您交流! ----------

运算符的优先级

 此资料由itjob教程网共享,如有转载使用请注明出处

Java支持一元和二元运算符。一元运算符对单一的操作数起作用,二元运算符对两个操作数起作用。假如没有运算符优先级规则的限制,下面的表达式可能得出几种不同的结果。

x = 15 + 3 * 2 - 14

下表按优先顺序列出了各种运算符:

优先级

结合性

运算符

描述

1

不适用

()

括号:强制次序

2

从右到左

++ --

前/后增减1(一元)

从右到左

+  -

加法 减法(一元)

从右到左

~

一元按位逻辑非

逻辑求补(一元)

从右到左

逻辑非

从右到左

(类名)

类型转换

3

从左到右

*  /  %

乘法、除法、求余

4

从左到右

+  -

加法、减法

5

从左到右

<< 

>> 

>>> 

左移

右移(符号扩展)

右移(零扩展)

6

从左到右

<    <=

>    >=

instanceof

小于、小于等于

大于、大于等于

该类的一个实例对象

7

从左到右

==  !=

相等、不相等

8

从左到右

&

按位与

9

从左到右

^

按位异或

10

从左到右

|

按位或

11

从左到右

&&

12

从左到右

||

13

从右到左

?:

三元条件

14

从右到左

=

赋值

15

从右到左

*=   /=   %=   += -=     <<=   >>=   >>>=   &=   ^=   |=

赋值并运算

关于++i和i++:

例如:

Int a = 1;

a = a + 1;   //a = 2;

可以变化为:

a += 1;     //此时a = 3;

还可以变化为:

++a;         // a = 4;

另有:

int b;

b = ++a;   //则: b = 5, a = 5; a先自加后然后将a的值赋给b;

如果:

int c;

c = a ++; //则: c = 5; a = 6; a先将自己的值赋给c,然后自加1

 

逻辑表达式

位运算

Java编程语言支持整数数据类型的位运算,它们的运算符~、&、^和|分别表示位运算的NOT(为求反)、位AND、位XOR和位OR。

10110000 =  ~01001111  

00001101 =   00101101 &  01001111

01100010 =   00101101 ^  01001111

01101111 =   00101101 |  01001111

逻辑运算符

运算符&& (定义为AND)和||(定义为OR)执行布尔逻辑表达式。请看下面的例子:

MyDate d = null;

if ((d != null) && (d.day() > 31)) {

   // dosomething with d

注意:int到boolean不能自动转换。

int  i = 1;

if ( i ) //generates a compile error

if (i != 0) // Correct

字符串连接

运算符 +  能够进行String对象的链接并生成一个新的String:

String salutation = "Dr. ";

String name = "Jack " +"Arthur";

String title = salutation + name;

最后一行的结果是:

Dr. Jack Arthur

如果+运算符中有一个自变量为String对象,则其它自变量将被转换成String。所有对象都可被自动转换成String,尽管这样做的结果可能是意义含糊的。不是串的对象是通过使用toString() 成员函数而转换成串的等价物的。

移位运算符

右移位运算符>>和>>>

Java编程语言提供了两种右移位运算符。

运算符>>进行算术或符号右移位。移位的结果是第一个操作数被2的幂来除,而指数的值是由第二个数给出的。例如:

128 >> 1 gives 128/2 1 = 64

256 >> 4 gives 256/2 4 = 16

-256 >> 4 gives -256/2 4 = -16

逻辑或非符号右移位运算符>>>主要作用于位图,而不是一个值的算术意义;它总是将零置于最重要的位上。例如:

1010 ... >> 2 结果是 111010 ...

1010 ... >>> 2 结果是001010 ...

在移位的过程中, >>运算符使符号位被拷贝。

注意:

如果移位运算符左侧操作数是int类型,将它们右侧的操作数模32。

如果移位运算符左侧操作数是long类型,将它们右侧的操作数模64。

因而, 任何int x, x >>> 32都会导致不变的x值, 而不是你可能预计的零。

>>>运算符仅被允许用在整数类型, 并且仅对int和long值有效。如果用在short或byte值上, 则在应用>>>之前, 该值将通过带符号的向上类型转换被升级为一个int。有鉴于此,无符号移位通常已成为符号移位。

左移位运算符(<<)

运算符<<执行一个左移位。移位的结果是:第一个操作数乘以2的幂,指数的值是由第二个数给出的。例如:

128 << 1 gives 128*21 = 256

16 << 2gives 16*22 =64