更新時(shí)間:2022-03-21 11:39:05 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1993次
我們?cè)贘ava中有兩個(gè)不同的類別,它們是原始類型和Java引用類型。
原始類型是byte、char、int、long 、 double、short和boolean。指定對(duì)象類型的類是引用類型,例如Integer、Double、Long等。
當(dāng)涉及到原始類型的初始化時(shí),它們默認(rèn)初始化,例如boolean 初始化為 false,其他初始化為 0。它們還可以存儲(chǔ)其聲明類型的一個(gè)值。
引用類型變量是對(duì)象,因此它們將對(duì)象的位置存儲(chǔ)在內(nèi)存中,并且默認(rèn)初始化為空值。
原始變量包含值。

在下面的內(nèi)存視圖中,“變量 i”的值為 23,其內(nèi)存地址為 4567,而“變量 c”的值為“d”,其內(nèi)存地址為 5234。

在引用類型中,變量包含值的地址。

在下面的內(nèi)存視圖中,變量 str值指向該值,其地址為 2675。當(dāng)我們查看地址 2675 時(shí),該值是“sw test academy”。這樣,我們可以說變量str指向的是“sw test academy”這個(gè)值。

在下面的示例中,我們將同時(shí)查看內(nèi)存中的原始類型和引用類型,以更好地理解這個(gè)概念。

根據(jù)上面的代碼,如下圖所示的 num1 和 num2 具有不同的地址并保存值 22 但 String 變量指向相同的值,它們的值是值“sw test academy”的地址,即900。

讓我們做一些例子,看看它們?cè)诖a中的表現(xiàn)。
原始類型在 Java 中是按值傳遞的,我們將在下面的示例中看到這一點(diǎn)。變量a的值在我們?cè)?modify 方法中修改后沒有改變,因?yàn)槲覀儼l(fā)送的是變量 a的副本,而不是它的引用。這樣,在modify()方法中,我們更改的是“副本 a 的值”,而不是“真正的 a ”或“ a 的引用”。在編程中,我們稱這種行為為“按值傳遞”。
公共類PrimitiveTypeExample {<字體>< /font >
@Test <字體>< /font >
public void originalTypeExample () {<字體>< /font >
詮釋a = 8 ; <字體>< /字體>
系統(tǒng)。出來。println ( "修改前:" + a ) ; <字體>< /字體>
修改(一);<字體>< /字體>
系統(tǒng)。出來。println ( "修改后:" + a ) ; <字體>< /字體>
}<字體>< /font >
<字體>< /字體>
私有靜態(tài)無效修改(int a ){<字體>< /font >
- 一種; //在這里,a的值不會(huì)改變,因?yàn)閍來這里不是作為參考。<font></font>
系統(tǒng)。出來。println ( "方法內(nèi)部a的值:" + a ) ; <字體>< /字體>
}<字體>< /font >
}
輸出

在下面的示例中,modifyAndSum()方法不會(huì)更改原始數(shù)組,因?yàn)樵诖朔椒ㄖ校覀冋趧?chuàng)建數(shù)組的副本并對(duì)這個(gè)Java復(fù)制數(shù)組進(jìn)行操作。這就是為什么在我們測(cè)試中的modifyAndSum()方法之前和之后,數(shù)組元素的總和是相同的。但是,我們將數(shù)組的引用發(fā)送給sum()方法,這就是為什么在sum()方法中我們要更改原始數(shù)組。這在編程中稱為“按引用傳遞” 。
公共類ReferenceTypeExample {<字體>< /font >
@Test <字體>< /font >
public void referenceTypeExample () {<字體>< /font >
int [] myArr = new int [] { 4 , 5 } ; <字體>< /字體>
<字體>< /字體>
系統(tǒng)。出來。println ( "在 modifyAndSum 方法之前:" + ( myArr [ 0 ] + myArr [ 1 ])) ; //所有前數(shù)組中數(shù)字的總和。<font></font>
modifyAndSum ( myArr ) ; <字體>< /字體>
系統(tǒng)。出來。println ( "modifyAndSum方法后:" + ( myArr [ 0 ] +myArr [ 1 ])) ; //modifyAndSum 方法沒有改變?cè)紨?shù)組。<font></font>
總和(myArr );<字體>< /字體>
系統(tǒng)。出來。println ( "求和后的方法:" + ( myArr [ 0 ] + myArr [ 1 ])) ; //Sum 方法因?yàn)橐妙愋投淖兞?myArr!<font></font>
}<字體>< /font >
<字體>< /字體>
private static void modifyAndSum ( int [] arr ) {< font >< /font >
arr = 數(shù)組。copyOf ( arr, arr.length ) ; //這里,我們正在創(chuàng)建一個(gè)新數(shù)組!修改不會(huì)影響原始數(shù)組。<font></font>
arr [ 0 ] --; <字體>< /字體>
系統(tǒng)。出來。println ( "內(nèi)部 modifyAndSum 方法:" + ( arr [ 0 ] + arr [ 1 ])) ; <字體>< /字體>
}<字體>< /font >
<字體>< /字體>
private static void sum ( int [] arr ) {< font >< /font >
系統(tǒng)。出來。println ( "內(nèi)部求和法:" + ( arr [ 0 ] + arr [ 1 ])) ; //這里我們添加原始數(shù)組的值。<font></font>
arr [ 0 ] --; //這里,我們正在修改原始數(shù)組,因?yàn)槲覀冏鳛閰⒖及l(fā)送。<font></font>
}<字體>< /font >
}
輸出

相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)