高頻面試題,值傳遞和引用傳遞你遇到過嗎?
hello大家好,我又和大家見面了,各位還記得上海千鋒文哥嗎?文哥最近帶的班級畢業(yè)了,班里的學(xué)員都在面試找工作。通過大家的面試情況我們發(fā)現(xiàn),企業(yè)針對java初級開發(fā)工程師的要求主要集中在對java基礎(chǔ)知識點(diǎn)的考察。
所以如果你的java基礎(chǔ)知識掌握得非常扎實(shí)牢固,拿一份理想的offer是不難的。這就要求各位童鞋們在學(xué)習(xí)的時(shí)候一定要注重基礎(chǔ)知識的理解和掌握,切不可眼高手低,走馬觀花。

今天,文哥通過自己班級學(xué)員的面試情況,總結(jié)了一道非常高頻的面試題分享給大家。這就是值傳遞和引用傳遞的理解。為什么文哥單拿這道題來講解呢?因?yàn)榘嗬锏膶W(xué)員不止一個(gè)人被問到了這個(gè)問題(歷屆學(xué)員也經(jīng)常被問到這個(gè)問題),所以你是不是要拍拍大腿認(rèn)真看了?
好了,重點(diǎn)來了。

所謂傳遞,在java中其實(shí)就是將實(shí)際參數(shù)賦值給形式參數(shù)。那么什么是值傳遞,什么又是引用傳遞呢?現(xiàn)在文哥先給你說說值傳遞。
值傳遞:方法在調(diào)用的時(shí)候,實(shí)際參數(shù)把它的值賦予給形式參數(shù),但是形式參數(shù)的數(shù)據(jù)類型只能是基本數(shù)據(jù)類型和String。形式參數(shù)和實(shí)際參數(shù)在內(nèi)存上是兩個(gè)獨(dú)立的變量,對形式參數(shù)的修改并不會影響實(shí)際參數(shù)的值(敲黑板,這點(diǎn)很重要)。
概念搞清楚之后,我們一起來看下面的代碼:
請問結(jié)果是多少?
很多同學(xué)可能不假思索的回答:100!因?yàn)閜assingParameter方法的內(nèi)部對b值重新賦予了。事實(shí)上并不是你們想的那樣。
下面我們結(jié)合我們的定義和代碼來畫一張圖:

我們現(xiàn)在解讀一下這幅圖的意思:
我們先看main方法,main方法里面將實(shí)際參數(shù)b傳遞給passingParameter方法的形式參數(shù)a,由于形式參數(shù)a是int類型,所以可以判定這是值傳遞。
根據(jù)我們上面給值傳遞的定義,passingParameter(b);
這句代碼里面的b的值只是int b = 10的復(fù)制品(或者說是化身)。
所以不管passingParameter方法內(nèi)部如何對這個(gè)復(fù)制品進(jìn)行操作,永遠(yuǎn)也無法修改b本身的值。
所以main方法里面的輸出語句輸出的是b值本身,也就是10。這么說大家聽懂了不咯?
下面我們再看看看引用傳遞。
引用傳遞:指的是在方法調(diào)用時(shí),傳遞的實(shí)際參數(shù)是java對象,也就是對象的內(nèi)存空間的地址。而形式參數(shù)也會指向這一內(nèi)存地址。注意被傳遞的形式參數(shù)的數(shù)據(jù)類型必須是引用數(shù)據(jù)類型(又敲黑板了,這點(diǎn)很重要)。

概念理解清楚之后,我們再來看一段代碼:
請問main方法執(zhí)行之后輸出的結(jié)果是多少?說18就對了。為了便于大家理解,我再畫一幅圖:

現(xiàn)在我們來解讀一下這幅圖的意思:
我們先看main方法,main方法中給passingParameter方法傳遞了一個(gè)student對象,由于passingParameter的形式參數(shù)是Java對象,故這種傳遞稱之為引用傳遞。
根據(jù)代碼,main方法中new的student的對象是在堆內(nèi)存中開辟空間并創(chuàng)建的,所以student這個(gè)變量指向了這個(gè)對象。根據(jù)引用傳遞的概念,傳遞的是對象的內(nèi)存地址。
由此可得passingParameter的形式參數(shù)student也指向了這個(gè)對象的內(nèi)存地址,所以在passingParameter方法內(nèi)部對age屬性進(jìn)行修改,是對實(shí)際參數(shù)和形式參數(shù)共同指向的那個(gè)對象進(jìn)行修改。
所以main方法中最后輸出的值是對象修改之后的屬性值。這么說大家聽懂了不咯?
好了,這就是文哥今天給大家分享的一道經(jīng)典而又高頻的面試題,希望對大家的java學(xué)習(xí)能夠帶來幫助。

2022新版Java高頻面試題馬上上線,不要錯(cuò)過~?
點(diǎn)擊千鋒教育主頁——?jiǎng)討B(tài)
