cora java volume I 學習筆記

在這些天將core java volume I的非GUI部分看完了同時也將thinking in java看到了第八章,就兩者深度比較而言,thinking in java的深度要比前者大很多,由於明天要去亞信聯創面試,所以在這裏將core java volume I 複習一遍同時把 thinking in java也複習一遍,當然同時會加上令我印象深刻的《設計模式的藝術--軟件開發人員內功修煉之道》一書中關於singleton模式的理解。

第一部分:

Integer types : java中基本類型有八種:byte,short,int, long,boolean,char,float ,double,他們的storage require分別是(byte):byte:1 , short :2 , int :4, long :8, char :2, float : 4 , double :8 .boolean不知道,大概也沒必要知道,因爲它是特殊的,基本沒有 up-cast或者 down-cast。

我們都知道浮點數是不準確的,對於double,double的wrapper(包裝類)有以下的static variable Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN, 在Float裏面也一樣有這些。NaN的意思是 not a number.

其次:System.out.println(2.0 - 1.1) 的結果會是:0.8999999999999999999 ,這就是浮點數的不準確性。

char的值會是:\u0000 to \uFFFF .

這7個類型之間的cast如下圖:


此外請記得,各種基本類型的默認值:boolean : false , char :'\u0000' (null) 其他都是0

Java操作符:

java操作符的優先級記憶方法:

Ulcer Addicts Really Like C A lot 

   

ulcer  unary !~ + - ++ --
Addicts  arithmetic *  / % + - << >>
Really Relational > < >= <= == !=
Like Logical && || & | ^
C Conditional A>B?X:Y
A Lot Assignment =(或者複合等於 *= 等)

結合性 : Right to Left : unary , conditional , Assignment 就是說開頭一個和後尾的兩個都是 Right to left ,其他都是 left to right

根據自身情況的特別提醒:~i 與 i 二進制位上取反,  -i 與 i 數值上加和爲0

請注意 >> 操作符和 >>> 操作符的區別:

>> : 符號拓展

>>> : 0拓展

其次,關於異或(^)的性質的使用也很多,但是不在我們今天這篇文章裏面討論。

 

控制流程:

這裏必須說明一個:switch作爲多路選擇,選擇因子必須爲 int 或者 char 這樣的整數值 或者 string 這樣的類型

其次: 如果將一個 float 或者 double cast爲 整形時(int, long ,char ,byte) 小數部分會砍掉


比較:

整形值和浮點值的比較都很簡單,在這裏不介紹,但是卻想提出 string對象的比較:

		String str1 = new String("abc");
		String str2 = new String("abc");
		System.out.println(str1 == str2);
		System.out.println(str1.equals(str2));
這樣的結果是: false true


		String str1 = "abc";
		String str2 = "abc";
		System.out.println(str1 == str2);
		System.out.println(str1.equals(str2));
這樣的結果是: true true


		String str1 = new String("abc");
		String str2 = "abc";
		System.out.println(str1 == str2);
		System.out.println(str1.equals(str2));
這樣的結果是:false true 

只要明白jvm對於 字符竄字面值常量放在 常量池中,new的string對象放在heap中這個道理,並且知道對於一個object  == 比較的是object的地址,就能明白以上答案。

同時,對於String 對象, equals比較的是兩個對象的hashcode,string的hashcode較特別:

hashcode = hashcode*31 + charAt[i];
所以equals比較的是兩個string的字符串是否一樣。其他object的 hashcode一般是跟內存地址有關的。


高精度數字:BigInteger 和  BigDecimal 

這兩個class 在 java.math包中,支持任意進度的整數和定點數,簡單創建和使用如下:

BigInteger a = BigInteger.valueOf(100);

// 省略了 b的生成過程
BigInteger c = a.add(b);
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2));




第二部分:初始化與清理

有一位同學去騰訊面試產品經理實習生,被面試官問了一個問題:怎樣理解面向對象?

回來一想,以下這副圖可以幫我們瞭解面向對象:

面向對象已數據爲核心,對數據和處理數據的method進行封裝,提高了安全性。




未完待續(to be continue...)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章