//让a先执行算术运算,然后自加 ,b的值是11
int b = a++ + 6;
int a = 5;
//让a先自加,然后执行算术运算,b的值是12
int b = ++a + 6;
- - -:自减。也是单目运算符,用法与"基本相似,只是将操作数的值减1。
Java并没有提供其他更复杂的运算符,如果需要完成乘方、开方等运算,则可借助于java.lang.Math 类的工具方法完成复杂的数学运算。
=======================================================================
赋值运算符用于为变量指定变量值,与C类似,Java也使用 =作为赋值运算符。通常,使用赋值运 算符将一个直接量值赋给变量。
int a=5;
也可使用赋值运算符将一个变量的值赋给另一个变量。
int a=5;
int b=a;
======================================================================
Java支持的位运算符有如下7个。
-
&: 按位与。
-
|: 按位或。
-
〜:按位非。
-
^:按位异或。
-
<< : 左移运算符。
-
>>:右移运算符。
-
>>>:无符号右移运算符。
位运算符的基本运算规则
设A = 0011 1100(2) 60(10) B = 0000 1101(2) 13(10)
| 操作符 | 描述 | 例子 |
| — | — | — |
| & | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | | 如果相对应位都是 0,则结果为 0,否则为 1 | (A |
| ^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
| 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
| >> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
| >>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |
=======================================================================
比较运算符用于判断两个变量或常量的大小,比较运算的结果是一个布尔值(true或false),Java 支持的比较运算符如下:
-
>:大于,只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值,则返回true。
-
>=:大于等于,只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回true。
-
<:小于,只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回trueo
-
<=:小于等于,只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回true。
-
==/=:等于,如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们 的值相等,也都将返回true——例如97 = 'a’返回true, 5.0 = 5也返回true;如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true;Java也支持两个boolean类型的值进行比较,例如,true = false 将返回false 0
基本类型的变量、值不能和引用类型的变量、值使用==进行比较;boolean类型的变量、值不能与其他任意类型的变量、值使用=进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用=进行比较.
- !=:不等于,如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要 它们的值不相等,也都将返回true;如果两个操作数都是引用类型,只要两个引用指向的不是同一个对象就会返回true。
=======================================================================
-
&& :与,当且仅当两个操作数都为真,条件才为真。
-
& :不短路与,作用与&&相同,但不会短路。
-
| | : 或,如果任何两个操作数任何一个为真,条件为真。
-
|:不短路或,作用与||相同,但不会短路
-
!: 非,用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
对短路逻辑或||而言,如果第一个操作数返回true, ||将 不再对第二个操作数求值,直接返回true;不短路与|则两边都要判断。
int a = 5;//定义一个变量;
boolean b = (a>4)||(a++<10);
//使用短路逻辑运算符的结果为5
System.out.println(a);
boolean c = (a>4)&(a++<10);
System.out.println(“a的结果为”+a);
boolean c = (a>4)&(a++<10);
//使用不短路逻辑运算符的结果为6
System.out.println(“a的结果为”+a);
&与&&的区别与此类似:&总会计算前后两个操作数,而&&先计算左边的操作数,如果左边的操作数为false,则直接返回false,根本不会计算右边的操作数。
int a = 5;//定义一个变量;
boolean b = (a<4)&&(a++<10);
//使用短路逻辑运算符的结果为5
System.out.println(b);
//使用不短路逻辑运算符的结果为6
boolean c = (a<4)&(a++<10);
System.out.println(“a的结果为”+a);
===========================================================================
赋值运算符可与算术运算符、位移运算符结合,扩展成功能更加强大的运算符。扩展后的赋值运算
-
+=:对于x+=y,即对应于x = x + y。
-
-=:对于x -=y>即对应于x = x - yo
*=:对于x *= y,即对应于x = x * yo
-
/=:对于x/= y,即对应于x = x/y。
-
%=:对于x %= y,即对应于x = x % y。
-
&=:对于x&=y,即对应于x = x & y。
-
|=:对于x |=y,即对应于x = x|y。
-
^=:对于x A=y,即对应于x = x Ay。
-
<<=: 对于x<<=y,即对应于x = x<<y。
-
>>=: 对于x>>=y,即对应于x = x >> y。
-
>>>=: 对于x»>=y,即对应于x = x >>> y。
=======================================================================
三目运算符只有一个?:,三目运算符的语法格式如下:
variable x = (expression) ? value if true : value if false
int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "Value of b is : " + b );
========================================================================
运算符优先级
具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
| 类别 | 操作符 | 关联性 |
| — | — | — |
| 后缀 | () [] . (点操作符) | 左到右 |
| 一元 | + + - !〜 | 从右到左 |
| 乘性 | * /% | 左到右 |
| 加性 | + - | 左到右 |
| 移位 | >> >>> << | 左到右 |
| 关系 | >> = << = | 左到右 |
| 相等 | == != | 左到右 |
| 按位与 | & | 左到右 |
总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
相关阅读docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
[外链图片转存中…(img-018jbzdN-1724651397301)]
[外链图片转存中…(img-toKzirD5-1724651397302)]
由于内容太多,这里只截取部分的内容。
相关阅读docs.qq.com/doc/DSmxTbFJ1cmN1R2dB