自2010年起,Google和甲骨文一直就Android系統(tǒng)是否侵犯甲骨文的版權(quán)和專利爭(zhēng)論不休。其實(shí)雙方的爭(zhēng)論點(diǎn)倒不是Google是否在 Android 中使用了Java APIs蜕着,Google對(duì)此也沒有否定肴颊,因?yàn)檫@樣能讓數(shù)百萬的開發(fā)者為自己開發(fā)應(yīng)用程式秕重。Google的論點(diǎn)是策治,APIs不能有版權(quán),它本來就是用來讓應(yīng)用程式間相互交流创夜,而很多公司也會(huì)讓開發(fā)者自由使用杭跪。甲骨文對(duì)此的態(tài)度當(dāng)然是我不聽、我不聽驰吓、我不聽涧尿。
最終聯(lián)邦陪審團(tuán)裁定Android操作系統(tǒng)并未侵犯甲骨文的版本,37個(gè)Java API是正常使用檬贰。Android程序員開始噴甲骨文姑廉,并慶幸我們的飯碗保住了。
回到面試上翁涤,今天聊一下和Java相關(guān)的面試題桥言。沒錯(cuò)總有那么一些公司在招Android程序員時(shí),比較側(cè)重考察Java基礎(chǔ)和能力的葵礼。Java的值傳遞和引用傳遞問題号阿,相信很多人都被問題過,當(dāng)然很多時(shí)候面試官都不會(huì)這么直白的問鸳粉,他們會(huì)給你設(shè)計(jì)一個(gè)方法讓你給出執(zhí)行這個(gè)方法后的輸出結(jié)果倦西。
面試題: Java的值傳遞和引用傳遞問題
看過一些Java教材的話,對(duì)這句話應(yīng)該不陌生:
“在Java里面參數(shù)傳遞都是按值傳遞”
這句話的意思是:按值傳遞是傳遞的值的拷貝赁严,按引用傳遞其實(shí)傳遞的是引用的地址值,所以統(tǒng)稱按值傳遞粉铐。
簡單的說疼约,基本類型是按值傳遞的,方法的實(shí)參是一個(gè)原值的復(fù)本蝙泼。類對(duì)象是按對(duì)象的引用地址(內(nèi)存地址)傳遞地址的值程剥,那么在方法內(nèi)對(duì)這個(gè)對(duì)象進(jìn)行修改是會(huì)直接反應(yīng)在原對(duì)象上的(或者說這兩個(gè)引用指向同一內(nèi)存地址)。不過要注意String這個(gè)類型,如下代碼:
public static void main(String[] args) {
String x = new String("goeasyway");
change(x);
System.out.println(x);
}
public static void change(String x) {
x = "even";
}
可以自己思考一下會(huì)輸出什么結(jié)果织鲸,為什么舔腾。String的對(duì)象是不可修改的,如果真正要達(dá)到改變字符串的效果搂擦,我們需要使用StringBuilder來替代String稳诚。
結(jié)論
很遺憾,我在實(shí)際中發(fā)現(xiàn)很多人都不會(huì)去重視基礎(chǔ)問題瀑踢,保括一些資深的開發(fā)也不太清楚Java還有這兩種區(qū)分扳还。在之前我呆過的一家公司,有一位女程序員直接在代碼里使用一個(gè)未經(jīng)聲明的方法橱夭,并給這個(gè)方法傳參數(shù)氨距,然后來問我為什么編譯不過呢。但這卻不妨礙她仍然可以為客戶解決問題棘劣,可以獲得組內(nèi)的最佳員工評(píng)選俏让。所以有很多人并不重視基礎(chǔ)的問題,總認(rèn)為不知道也無防茬暇,用的時(shí)候有問題自然會(huì)報(bào)出來首昔,到時(shí)候再解決就好了,你知道的也沒比我多能耐而钞。我只能說沙廉,知道的話確實(shí)不比別人多能耐,只是多了一份從容臼节。