运算符

算数运算符符号简介
+左右之和
-左减去右
*左右乘积
/左除以右
取模%左右相除获取余数

1.当有若干个数据类型的参与一个运算,那么最终结果类型取决于参与运算的变量中类型范围最大的那个变量类型。
比如, 参与运算的变量中, 有整形int丶双精度浮点型double丶短整型short, 那么最后的结果类型就是double。

int a = 1;
int b = 2;
double c = (double)a/b;

上面的代码中, a与b都是整型, 但是通过(double)a 这种转换将 a 转换为一个匿名的变量, 该变量的类型是double, 但是要注意: a本身依旧是int类型, 而不是double类型, 这样, (double)a/b就是double类型除以int类型, 结果自然是double类型。

2.取模: 用%表示。我们在小学里面都学过余数, 整数除不尽怎么办, 比如说1/2就是商0余1, 那么这个余数呢它在我们Java里面叫做模, 我们可以通过取模这个运算符得到某两个整数相除的余数。

int a = 5;
int b =3;
int c = a%b;

那么c的值是2, 因为5除以3结果是1余2, 取模也叫取余, 取的就是余数。
将a的值改为-5

int a = 5;
a = -5;
int b =3;
int c = a%b;

现在c的值是-2。为什么呢?
-5%3的定义是 -5 = 商 * 3 + 余数, 商丶余数都是整数,
商 = -5/3得到的整数, 也就是-1,
-1*3 + (-2) = -5, 对上了。
Java中取模后的正负与被除数符号相同, 也就是%前面的数。

关系运算符符号描述
大于>左边大于右边时返回true, 否则返回false
小于>左边小于右边时返回true, 否则返回false
等于==左边等于右边时返回true, 否则返回false
不等于!=左边不等于右边时返回true, 否则返回false
大于等于>=左边大于等于右边时返回true, 否则返回false
小于等于<=左边小于等于右边时返回true, 否则返回false

1.关系运算的结果是个boolean值, 不为真就为假, 真的布尔值为true, 假的布尔值为false。

int a = 3;
int b = 2;
boolean c = (a!=b);

c输出true, 3确实不相等于2;

逻辑运算符符号描述
&&符号左右条件表达式都为true才返回true,否则返回false
II符号左右条件表达式一个为true就返回true
!! 条件表达式, 条件表达式为true返回false, 条件表达式为false返回true

1.逻辑运算符本身也返回一个boolean值, 双目运算符: 与丶或, 即有两个操作数的运算符。

int a = 1;
int b = 2;
int c = 3;
int d = 4;
boolean e = a<b && c<d;

a<b 这是一个关系运算, 返回一个boolean值, 是正确的为true, c<d同样true, 当两边的条件都为真返回true, e的值是true
我们改一下第一个条件, a>b

e = a>b && c<d;

a>b, 1>2, 真的假的? 假的, 它是假的, 那么c<d, 3<4, 它是真的, 一个假的一个真的, 只有都为真的才返回true, 所以e的值为false;
逻辑与, 并且的意思。
试试逻辑或

e = a>b || c<d;

换成值看也就是1>2 || 3<4, 这样是假 || 真, 返回真, boolean值为true;
逻辑或, 或者的意思, 要么这样要么那样, 两者之间只要有一个成立, 那结果就是为真。

2.关于逻辑运算符的短路特性。

int f = 5;
e = a<b && (f = c)<d;

这个时候, 1<2, 第一个条件满足true, 继续查看后面的, 先执行括号里的, f = c, f原来的值为5, c的值为3, 也就是将c的值赋给f, f = 3, f<d等于3<d等价于3<4, 那么现在呢f的值是3, 受到了改变, 如果第一个表达式为false, f的值还会改变吗?

e = a>b && (f = c)<d;

在第一个条件a>b里, 逻辑与发生了短路, 一个为false, 那么它没有必要继续运行下去了, f的值还是5, 并没有受到改变;

短路特性:

  1. 逻辑与: 如果第一个表达式为false, 那么结果肯定就是false, 所以在这种情况下, 将不会执行后面的运算了, 即发生了短路。
  2. 逻辑或: 如果第一个条件为真了, 那么是不是整个为真了, 因为不管第二个为真还是为假, 它的结果呢已经由第一个运算符决定了, 肯定是真的, 那如果第一个运算符为假, 那么这个时候就还有必要执行第二个运算符, 看一下第二个运算符结果是真还是假, 来决定结果到底是什么。
  3. 关于短路特性大家一定不要死记硬背, 一定要从这个原理上来理解, 为什么发生短路?就是因为结果已经由第一个条件表达式决定了, 那么就没有必要看第二个运算符的结果了, 那么如果第一个运算符没法决定结果, 这个时候才要去看第二个运算。
累加符号描述
前置自增++i+1后再做使用
后置自增i++先做使用再+1
递减符号描述
前置自减- -i-1后再做使用
后置自减i- -先做使用再-1

1.如何实现 i + 1?

int i = 3;
i = i + 1;
System.out.println(i);

a等于3, a是3, 3加上1是4, 将4赋给i, 换句话说是将等号右边的值计算出结果赋给等号左边, 这样的话实现了变量i的值的变化, 因此i的值是4, 这样是常规的一种方式实现了i的自增, 我们也可以用运算符来代替;

int i = 3;
//i = i + 1;
i += 1;
System.out.println(i);

等价于a = a+1, 它就等于这个东西, 是不是少敲了一个i;

int i = 3;
//i = i + 1;
//i += 1;
i++;
System.out.println(i);

i++也就是自增1, 3+1=4;
如果变量自增2就不能这样写了, 要用i = i + 2;或者是i += 2;

int i = 3;
//i = i + 1;
//i += 1;
System.out.println(i++);

这样, 我把i放到输出语句里面, 会输出3还是4?
先将i的值输出, 然后再自增+1, 输出3, 这就是后置自增, 先使用再自增;

int i = 3;
//i = i + 1;
//i += 1;
System.out.println(i++);
System.out.println(++i);

猜一猜第二个输出语句输出多少?
第一个输出语句先输出3, i自增后为4, 然后第二个输出语句是前置自增, 先将i的值+1, i的值是4, 4+1=5, 加完后的i再去输出, 输出5, 这就是前置自增, 先自增再使用;

自增自减特性:

  1. 关于i++, 作用是将i原来的值作于用途, 然后再让 i 自增1
  2. 关于++i, 作用是将 i 的值先自增1, 然后再将 i 进行操作
  3. 如果你不使用这个i进行操作, i++和++i都是自增1, 没有区别的
  4. 自减操作符特性一样, 不过是+1变为-1, 其实道理是一样的

还有如下的赋值运算符, 无过多介绍

符号描述
=右边的值赋给左边
+=左边的值加上右边的值然后赋给左边
-=左边的值减去右边的值然后赋给左边
*=左边的值乘以右边的值然后赋给左边
/=左边的值除以右边的值然后赋给左边
%=左边的值取模右边的值然后赋给左边
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值