Java操作符
重新再來看(總感覺第一次看)《java程式設計思想》的話,還是有很多的收穫,比如這篇Java 操作符。
一、算術操作符
①、Random
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Random r = new Random(2008);
System.out.println(r.nextInt(3)+ "-----------");
}
}
為什麼會輸出1,確實讓人百感交集,至少到目前為止,我還是沒有弄清楚為什麼會等於1,不是等於2,或者是0。
【小測試】Random的使用問題這裡有個話題可以參考,有人說的讓人很懂的樣子,但是我還是沒懂,但明白了以下:
- new Random()在沒有傳遞指定種子的時候,預設種子為當前時間(毫微秒為單位)。
- 設定種子後,就意味著r物件有著固定的形態,其第一次的next是固定的,第二次的next也是固定的,我本來以為有什麼規律可以發現,但沒有找到。
當前時間(毫微秒)作為種子時,也就意味著生成的隨機數將會盡可能的不同
public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;
②、魔幻數字47
本來我以為47是個神奇的數字,但其意義和我所想的截然相反,就是指單純的下面的意思
雖然程式作者寫的時候自己能瞭解數值的意義,但對其他程式員而言,甚至製作者本人經過一段時間後,會難以瞭解這個數值的用途,只能苦笑諷刺“這個數值的意義雖然不懂,不過至少程式會動,真是個魔術般的數字”而得名。
二、自動遞增和遞減
事到如今,我依然憎恨自動遞增和遞減,我覺得這個太魔幻,尤其是字首和字尾還不一樣。我是極不情願理解這樣的含義,但這一次,我好像“懂”了。
int i=0;
System.out.println(i++);
System.out.println(i);
System.out.println(++i);
System.out.println(i);
System.out.println(i--);
System.out.println(i);
System.out.println(--i);
System.out.println(i);
第一次輸出0,第二次1,第三次2,第四次2、、、
我從情感上討厭這樣的寫法。
三、關係操作符
①、==
不過對於==操作符來說,如果是要比較基本型別,ok,如果是基本型別的裝箱混比,那麼轉成基本型別再==,就不容易出現邏輯上錯誤。
int i = 1;
Integer j = 1;
Integer k = new Integer(1);
Integer k1 = new Integer(1);
System.out.println(i == j);
System.out.println(i == k);
System.out.println(j == k);
System.out.println(k1 == k);
不關乎答案如何,我覺得這種比較真心受夠了,真讓人久久不能釋懷。
②、短路
static boolean getB() {
Random r = new Random();
if (r.nextInt(5) < 4) {
return false;
}
return true;
}
static boolean getA() {
Random r = new Random();
if (r.nextInt(5) < 2) {
return false;
}
return true;
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
boolean c = getA() && getB();
System.out.println(c);
}
}
假如說存在以上這樣的一個程式,從概率上來講,把getA() && getB()
的形式換成getB() && getA()
更能節省時間。
為什麼會這樣,因為後一種形式在機率上更容易形成短路,也就是說getB()形成false的情況更多,這個時候getA()執行的機會就會少。
四、截尾和舍入
double d = 10.99;
float a = (float)d;
System.out.println(a);
int b = (int) a;
int f = Math.round(a);
System.out.println(b);
System.out.println(f);
向下轉型的時候會丟棄精度。
王二語錄
笑對現實的無奈,不能後退的時候,不再傍徨的時候,永遠向前 路一直都在──陳奕迅《路一直都在》
本文出自:【qing_gee的部落格】
相關文章
- 【Java】位操作符Java
- Java 操作符(3)Java
- java 操作符詳解Java
- RxJava操作符之建立操作符(三)RxJava
- RxJava操作符之組合操作符(六)RxJava
- RxJava操作符之轉換操作符(四)RxJava
- RxJava操作符之過濾操作符(五)RxJava
- SQL UNION 操作符 和 UNION ALL 操作符SQL
- JavaScript in 操作符JavaScript
- %操作符與/操作符(寫給自己看,以防忘記)
- JavaScript中 |、& 、!!操作符JavaScript
- 操作符詳解
- [譯] Pipeable 操作符
- RxJava常用操作符RxJava
- RxJava操作符列表RxJava
- [譯] 谷歌搜尋操作符大全(包含 42 個高階操作符)谷歌
- RxJava 學習筆記 -- 條件操作符和布林操作符RxJava筆記
- Kotlin——初級篇(五):操作符與操作符過載一Kotlin
- 3章 RxJava操作符RxJava
- JavaScript (,)逗號操作符JavaScript
- PostgreSQL:模式匹配操作符SQL模式
- PHP goto操作符使用PHPGo
- RxJava 操作符系列二RxJava
- RxJava操作符系列一RxJava
- RxJava操作符系列二RxJava
- RxJava操作符系列三RxJava
- RxJava 操作符系列五RxJava
- RxJava操作符系列四RxJava
- RxJS操作符(一)JS
- RxJS操作符(二)JS
- JavaScript 中的操作符JavaScript
- ORACLE之q操作符Oracle
- c#按位操作符&^|與邏輯條件操作符運算子&&_||_?:C#
- part05_Rxjava操作符RxJava
- JavaScript騷操作之操作符JavaScript
- 深入理解typeof操作符
- 操作符offset 和 jmp指令
- C++操作符過載C++