您的位置:首页 > 职场人生

黑马程序员——Java基础语法 之运算符

2015-10-19 00:16 253 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

Java基础语法之运算符

运算符分类:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符,三元运算符

算数运算符:

运算符
运算 范例 结果

+
正号 +3 3

-
负号 b=4;a=-b a=-4

+
加号 5+5
10

-
减号 6-4
2

*
乘号 3*4
12

/
除 8/2 4

%
取余数 5%4
1

++
自增 a=2;b=++a a=3;b=3(a先自增再赋值)

++
自增 a=2;b=a++ a=3;b=2(a先赋值再自增)

--
自减 a=2;b=--a a=1;b=1(a先自减再赋值)

--
自减 a=2;b=a-- a=1;b=2(a先赋值再自减)

+
字符串相加 “aa”+”bb” “aabb” 

(运算顺序跟数学算术一样,先乘除再加减,有括号先算括号)

例一:

class TestDemo{
public static void main(String[] arg){
System.out.println(6+5/3);
}
}


打印结果为

7//整数与整数相除,5/3只保留整数部分

例二:

class TestDemo{
public static void main(String[] arg){
System.out.println(5%2);
System.out.println(-5%2);
System.out.println(5%-2);
System.out.println(-5%-2);
}
}


结果

1

-1

1

-1

负数对正数(或负数)去模结果为负

正数对正数(或负数)去模结果为正

除数为零的运算

当除数与被除数都为整数,且除数为零时,例如:

int a =7,b=0

a/b与a%b都会出现异常

而当被除数与除数都为浮点类型时,且除数为0时,例如:

float a=7,b=0.0f(或者  double a=7,b=0.0)

/b与a%b都不会出现异常,但返回值为NaN(表示Not a Number)或者Infinity(表示正无穷大,-Infinity表示负无穷大),这两个是float与double的封装类的常量,其中NaN不等于任何值。

自己测试下

自增的陷阱

例子

class TestDemo{
public static void main(String[] arg){
short a =0;
a=a++;
System.out.println(a);}}


打印结果为

0

这里是因为a=a++的运算顺序:在赋值与自增前,a存入一个临时变量中temp=a;然后a自增a=a+1,然后进行赋值运算,把临时变量存入a,a=temp;所以a=0
4000


赋值运算符

运算符
说明 范例 结果

=
把右边值赋值给左边 a=4;b=a
a=4,b=4

+=
左边值加上右边值的和赋值给左边 a=4;a+=2
a=6

-=
左边值减去右边值的和赋值给左边 a=4;a-=2
a=2

*=
左边值乘以右边值的和赋值给左边 a=4;a*=2
a=8

/=
左边值除以右边值的和赋值给左边 a=4;a/=2
a=2

%=
左边值对右边值去模赋值给左边 a=6;a%=4
a=2

 

a=a+4与a+=4有所不同

程序一:

class TestDemo{
public static void main(String[] arg){
short a =8;
a+=4;
System.out.println(a);//结果为12}}


 

程序二:

class TestDemo{
public static void main(String[] arg){
short a =8;
a=a+4;
System.out.println(a);}}


结果出现编译错误:

TestDemo.java:4: 错误: 不兼容的类型: 从int转换到short可能会有损失

a=a+4;

   ^

1 个错误

原因:执行s+=4;时。编译器自动把short类型的变量a转为int类型再参与运算,然后把int类型结果强制转换为short;而s=s+4;编译器不进行强制转换。所以int类型结果赋值给short类型出现错误。

赋值顺序:

 

先运算左边赋值,再运算右边赋值,再把右边赋值给左边;

比较运算符

运算符 
运算 范例 结果

==
相等于 4==3;
false

!=
不等于 4!=3;
true

<
小于 4<3;
false

>
大于 4>3;
true

<=
小于等于 4<=3;
false

>=
大于等于 4>=3;
true

Instanceof
是否类的对象 “hello” instanceof String true

比较运算符得出的结果都boolean型,要么true要么false

逻辑运算符

运算符
运算 范例 结果

&
and(与)
alse&true false(两边条件都为true,结果才true)

&&
and(短路与)
false&&true false(只要前面条件为false,就不判断后面条件)

|
or(或)
false|true true(其中一边或者两边都为true,结果就true)

||
or(短路或)
false||true true (只要前面条件为true,就不判断后面条件)

^
XOR(异或)
false^true false(两边相同为false)

!
Not(非)
!false true(true变false,false变true)

例题:

&和&&(|和||)的区别

两者运算结果都是一样的,但运算过程有所不同

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

&&:当左边为false时,右边不参加运算,这样可以提升效率。(|和||同理)

小程序

class TestDemo
{
public static void main(String[] args)
{	int  a =6,b=8;
System.out.println(a>b&a==b++);
System.out.println(a);
System.out.println(b);
System.out.println(a>b&&a==b++);
System.out.println(a);
System.out.println(b);
}
}


打印结果:

false

6

9

false

6

9

结论,&&运算比较符,左边为fasle时,右边就不运算

位运算符

运算符
运算 范例

<<
左移 3<<2=12(3*2*2=12)【0011<<2-----1100】补0

>>
右移 7>>2=1(7/2/2=1只保留整数部分)【0111>>2----0001】最高
位为1就补1,最高位为0就补0

>>>
无符号右移 同>>,不同点在于不管最高位1或0,最高位都补0

&
与运算 6&3=2【0110&0011=0010】

|
或运算 6|3=7【0110|0011=0111】

^
异或运算 6^3=5【0110^0011=0101】

~
反码 ~6=-7【~0000 0000 0000 0000 0000 0000 0000 0110=

1111 1111 1111 1111 1111 1111 1111 1001】

负数为正数的反码+1

 

一个数异或同一个数两次,结果还是这个数,例如:



可以利用这个规律进行对数据加密,把数据异或某固定值再保存,打开时再异或同样的值解密。

利用异或交换变量:

int n=6,m=9;
n=n^m;
m=n^m;
n=n^m;
System.out.println(n+”...”+m);

三元运算符

格式:

(条件表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2。

例子:

class TestDemo
{
public static void main(String[] args)
{
int n=6,m=9;
System.out.println((n>=m)?n:m);
}
}

结果为

9

表达式:就是具有一定语法规则的语句。

需要注意的是:使用三元运算符表达式进行判断,必须要有返回值,跟if语句有所不同

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: