在實現(xiàn)工作中久了,對于java的基礎(chǔ)反而模糊了很多,特別是一些理論,最近在面試中,我也會把我這幾天在android崗位面試中遇到的java面試題也分享給大家(后續(xù)會把android的面試知識點也一起分享),隨便整理了一下java的基礎(chǔ)知識點,隨便分享給正在找工作的童鞋們一起來回顧,希望能找到一個滿意的工作!
1)a = a + b 與 a += b 的區(qū)別(答案)
+= 隱式的將加操作的結(jié)果類型強制轉(zhuǎn)換為持有結(jié)果的類型。如果兩這個整型相加模燥,如 byte咖祭、short 或者 int,首先會將它們提升到 int 類型蔫骂,然后在執(zhí)行加法操作么翰。如果加法操作的結(jié)果比 a 的最大值要大,則 a+b 會出現(xiàn)編譯錯誤辽旋,但是 a += b 沒問題浩嫌,如下:
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
(譯者注:這個地方應(yīng)該表述的有誤,其實無論 a+b 的值為多少补胚,編譯器都會報錯码耐,因為 a+b 操作會將 a、b 提升為 int 類型溶其,所以將 int 類型賦值給 byte 就會編譯出錯)
2)String min = "ab"; String max = "cabcdefjabfdemdadabc",統(tǒng)計大串中小串出現(xiàn)的次數(shù)字,手寫編程
public static void main(String[] args) {
//定義大串
String max = "cabcdefjabfdemdadabc";
//定義小串
String min = "ab";
//定義計數(shù)器變量
int count = 0;
//定義索引
int index = 0;
//定義循環(huán),判斷小串是否在大串中出現(xiàn)
while((index = max.indexOf(min)) != -1) {
count++; //計數(shù)器自增
max = max.substring(index + min.length());
}
System.out.println(count);
}
String字符串的一些API:
int length():獲取字符串的長度骚腥。
char charAt(int index):獲取指定索引位置的字符
* int indexOf(int ch):返回指定字符在此字符串中第一次出現(xiàn)處的索引。
* int indexOf(String str):返回指定字符串在此字符串中第一次出現(xiàn)處的索引瓶逃。
* int indexOf(int ch,int fromIndex):返回指定字符在此字符串中從指定位置后第一次出現(xiàn)處的索引束铭。
* int indexOf(String str,int fromIndex):返回指定字符串在此字符串中從指定位置后第一次出現(xiàn)處的索引。
* lastIndexOf
* String substring(int start):從指定位置開始截取字符串,默認到末尾厢绝。
* String substring(int start,int end):從指定位置開始到指定位置結(jié)束截取字符串契沫。
3)json的解析
4)==號與equals()方法的區(qū)別:
==: 基本數(shù)據(jù)類型比較的是值是否相等, 引用數(shù)據(jù)類型比較的是地址值是否相等
equals(): 只能比較引用數(shù)據(jù)類型, 未重寫之前,比較的是對象的地址值是否相同, 重寫之后, 比較的是對象的屬性值是否相同.
5)解釋 Java 堆空間及 GC?(答案)
當通過 Java 命令啟動 Java 進程的時候昔汉,會為它分配內(nèi)存懈万。內(nèi)存的一部分用于創(chuàng)建堆空間,當程序中創(chuàng)建對象的時候,就從對空間中分配內(nèi)存钞速。GC 是 JVM 內(nèi)部的一個進程贷掖,回收無效對象的內(nèi)存用于將來的分配。
6)Java 中堆和棧有什么區(qū)別渴语?(答案)
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域苹威,使用目的也不同。棧常用于保存方法幀和局部變量驾凶,而對象總是在堆上分配牙甫。棧通常都比堆小,也不會在多個線程之間共享调违,而堆被整個 JVM 的所有線程共享窟哺。