讀 Java解惑》後的碎嘴子(第一章)

2021-08-30 19:01:32 字數 2196 閱讀 9747

第一章--表示式問題

1.當取餘(%)操作結果不為0時,餘數的符號和左邊運算元相同,如1%2=1,-1%2=-1

總結:將取餘操作用來作判斷分支條件時,盡量用0值來作參照

2.需要精確結果時,避免使用float和double計算,尤其是貨幣計算,要使用int,long來以整數的形式計算,system.out.printf(string,object)並不是最好的解決方案,也可以用bigdecimal,但是構造方法的引數,一定要選用字串,

如new bigdecimal("2.20"),而不是new bigdecimal(2.20)

總結:二進位制浮點數不能精確表示10的任何次負冪

3.

long micro = 24 * 60 * 60 * 1000 * 1000;
結果竟然是500654080,儘管認為long型可以正常裝下計算結果,但是算式每個元素預設都會是int,結果也會以int的容量來計算,解決方法只需要把任何乙個元素強制宣告為long型即可得

到正確結果86400000000,如:

long micro = 24l * 60 * 60 * 1000 * 1000;

long micro = 24 * 60l * 60 * 1000 * 1000;
總結:就算結果型別是long,不能保證計算過程中不溢位

4.這個沒什麼意思,主要是數字1和字母l不要搞混淆

總結:該不用l就不用,該大寫l就大寫l

5.

system.out.println(long.tohexstring(0x100000000l + 0xcafebabe));
結果是cafebabe,少了個開頭的1,因為在非十進位制裡,表示負數無需加負號(-),0xcafebabe是int型並且最高位有值,因為它其實是個負數,在與

0x100000000l相加時被自動擴充套件成long型0xffffffffcafebabel,解決方法為0xcafebabe改為0xcafebabel,保證最高位是0,這樣它就不是乙個負數了

總結:在操作非十進位制時,要注意其真正的正負,同時最好讓他們初始有相同的型別而不是使其自動擴充套件

6.

system.out.println((int)(char)(byte)-1);
結果是65535,為什麼不是-1?原因來一步一步看,開始-1自動是int型,用二進位制表示是32個1,被砍成8位的byte變成了11111111,這是沒有問題的,因為int和byte是有符號型別的,存在

正負,而char卻不存在負數的問題,將8位byte轉換為16位的無符號char型別,實質先把byte轉回了int,其實(int)(char)(byte)-1和(int)(char)-1是等同的,不存在有符號8位(byte)變無符號16位(char)的情況,而是int轉byte一樣,

直接砍去16位,結果自然是16個1,又因為char無符號,最高位代表真正的值,16個1自然是65535

總結:強制轉換要考慮到型別本質有無符號的問題,其實可以看作算是第5條的乙個擴充套件

7.異或交換法,一些裝13的面試題裡遇到過(如怎麼用一條語句交換兩個變數的值,或交換兩個變數的值有幾種方法),這樣的花活實在是沒什麼意思

總結:有興趣可以看看具體內容,看看bloch大師的推理

8.

char x = 'x';

int i = 0;

system.out.println(false ? i : x);

結果是88而不是x,其中過程比較複雜,簡單的說因三目運算子的自有特性,當第二三運算元的型別不同,返回的型別也不同(這裡明顯地把char提公升為int了)

總結:用三目運算子時,最好保證兩個返回值型別一致

9.

short x = 0;

system.out.println(x+=123456);

結果是-7616,根據上面的經驗,這個一點都不難理解了

總結:byte,short,char這樣的型別,參與+=這樣的復合運算要注意自動轉型

10.

object obj = "a";

string str = "b";

obj+=str;

編譯器不通過,而obj = obj + str;這和+=這樣的復合賦值自身特性有關

總結:型別不一樣,還是少用復合賦值符號

讀C Primer第一章

今天看了一下c primer電子版的第一章,感覺收穫頗多。第一章只是講了一些入門知識,不過對於我來說c 早已入門,只是研究不深。所以第一章看得比較快。前一段時間也有看過英文版的,雖然語言上沒什麼問題,不過始終是英文的,收穫不是很多。第一章講得簡單,主要目的就是可以讓乙個入門者能執行乙個簡單的c 程式...

java基礎第一章 常量

常量 constant 在程式執行過程中其值不發生改變的量。分類 1,字面值常量 a.字串常量 用雙引號括起來的內容。例 china 李華 helloword 北京 b.整數常量 指所有的整數 1 2 20 1000 3020 c.小數常量 所有的小數 1.5 2.0 20.8 d.字元常量 用單引...

讀《全程軟體測試第一章》有感

學習軟體測試乙個月了,以後想做測試這份工作。想努力做好一件事,告訴自己我也是可以的。註冊csdn一段時間了,只是上來下點資料,沒有做過什麼別的事情,現在發現,自己浪費了好大的乙個資料庫啊,以後要好好利用。朱少民老師是我在csdn上的第乙個朋友,當時只是感覺他很有才,懂的東西好像很多,也很有人氣的樣子...