java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...
java基礎(chǔ)(2)--運(yùn)算符詳解
自增自減規(guī)則
自增自減就是常用的 a = a++ 或者 a = ++a;前者是后綴式,先把a(bǔ)賦值給a,再加一;后者是后綴式,先加一,在賦值給a;而且a++,++a并不是原子操作,在當(dāng)線程環(huán)境下并不會(huì)出錯(cuò),當(dāng)放在多線程下時(shí),就會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤的問(wèn)題。
public class Test01 {
private static int a = 0;
private static int b = 0;
private static AtomicInteger atomicInteger = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; i++){
Thread t = new Thread() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
a = a + 1;
b++;
atomicInteger.incrementAndGet();
}
}
};
t.start();
}
// 給計(jì)算機(jī)運(yùn)算的時(shí)間
Thread.sleep(2000);
System.out.println("a = a + 1: " + a);
System.out.println("b++ :" + b);
System.out.println("原子操作: " + atomicInteger);
Thread.sleep(3000);
System.out.println("a = a + 1: " + a);
System.out.println("b++ :" + b);
System.out.println("原子操作: " + atomicInteger);
}
}
結(jié)果是
a = a + 1: 9526
b++ :9930
原子操作: 10000
a = a + 1: 9526
b++ :9930
原子操作: 10000
所以在多線程環(huán)境下進(jìn)行自增自減時(shí)要注意加鎖,因?yàn)榭s略的自增自減其實(shí)是兩個(gè)操作。另外我還發(fā)現(xiàn)a+++b,以及a---b都是采用了貪心策略,即從左至右運(yùn)算的運(yùn)算符會(huì)盡可能的匹配運(yùn)算符,所以你會(huì)發(fā)現(xiàn)a--b會(huì)報(bào)錯(cuò)。
&和&&的區(qū)別
&&我們都用過(guò),但是&有誰(shuí)用過(guò)呢?他和&&有用什么不同呢,我們直接上代碼一探究竟:
public class Test02 {
public static void main(String[] args) {
int a = 1;
int c = 0;
// 只要&&前面的等式有一個(gè)錯(cuò)了,就不會(huì)管后面的條件
if (a < c && a / c > 0){
System.out.println("&&");
}
// if(a > c && a / c > 0){
// System.out.println();
// }
System.out.println("--------");
// 即使前面的等式錯(cuò)誤,也要判斷完所有的條件
if (a < c & a / c > 0){
System.out.println("&");
}
}
}
結(jié)果:
--------
Exception in thread "main" java.lang.ArithmeticException: / by zero
at base.Test02.main(Test02.java:15)
顯然,&和&&都具有邏輯與的功能,只有在所有條件都滿足的情況下才進(jìn)入if代碼塊,只不過(guò)&&具有短路性,對(duì)于&&運(yùn)算符兩端的等式,從左往右執(zhí)行該等式,只要有一個(gè) 等式不滿足就直接跳出if代碼塊,而&運(yùn)算符,總是會(huì)判斷完所有的條件等式。
總結(jié)
以上是生活随笔為你收集整理的java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 公路商店app怎么看好东西
- 下一篇: 如何自定义 iPhone 14 Pro