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

------<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/ba%b都会出现异常

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

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

/ba%b都不会出现异常,但返回值为NaN(表示Not a Number)或者Infinity(表示正无穷大,-Infinity表示负无穷大),这两个是floatdouble的封装类的常量,其中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,然后进行赋值运算,把临时变量存入aa=temp;所以a=0

赋值运算符

运算符 说明 范例 结果

= 把右边值赋值给左边 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+4a+=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;

   ^

个错误

原因:执行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(truefalsefalsetrue)

例题:

&&&|||)的区别

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

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

&&:当左边为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

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

& 与运算 6&3=20110&0011=0010

| 或运算 6|3=70110|0011=0111

^ 异或运算 6^3=50110^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语句有所不同

 

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值