導航:首頁 > 編程語言 > java只有值傳遞

java只有值傳遞

發布時間:2022-07-21 14:46:09

java類是值傳遞還是引用傳遞

基本類型是值傳遞,
引用類型
可以看作是是
引用傳遞
.舉個簡單的例子吧
public
class
tt
{
public
static
void
change(int
a)
{
a=2;
}
public
static
void
change(int[]
A)
{
A[0]=2;
}
public
static
void
main(String[]
args)
{
int
b=1;
change(b);
System.out.println(b);//基本類型是
值傳遞
,所以b的值沒有改變
int[]
B={1};
change(B);
System.out.println(B[0]);//數組版,對象等引用類型是引用傳權遞,所以B的值發生改變
}
}

❷ 為什麼java方法中只有值傳遞,沒有引用傳遞

您好:
Java中參數的傳遞方式有兩種:傳值和傳引用。按值傳遞(call
by
value)表示方法接受的是調用者提供的值;按引用調用(call
by
reference)表示方法接受的是調用者提供的變數地址。
傳值,參數為基本類型時,是採用傳值的方式,示例如下:

傳引用,一般參數為對象類型,示例如下:

希望對你有幫助!

❸ 6、如何來理解「java中沒有指針傳遞,只有值傳遞」這句話。

對於基本數據類型,int long這些,傳遞的就是值本身,所以是值傳遞
對於對象引用類型,參數傳遞時傳遞的不是對象本身,也不是對象指針,而是對象在內存中位置的一個引用,這個應用本質上就是一個值,只不過底層會根據這個值找到對象。所以無論哪種數據類型,從java層面來看其本質都是值傳遞

❹ JAVA中的傳遞都是值傳遞嗎有沒有引用傳遞呢[轉]

有沒有引用傳遞呢? 在回答這兩個問題前,讓我們首先來看一段代碼: Java代碼 public class ParamTest { // 初始值為0 protected int num = 0; // 為方法參數重新賦值 public void change(int i) { i = 5; } // 為方法參數重新賦值 public void change(ParamTest t) { ParamTest tmp = new ParamTest(); tmp.num = 9; t = tmp; } // 改變方法參數的值 public void add(int i) { i += 10; } // 改變方法參數屬性的值 public void add(ParamTest pt) { pt.num += 20; } public static void main(String[] args) { ParamTest t = new ParamTest(); System.out.println("參數--基本類型"); System.out.println("原有的值:" + t.num); // 為基本類型參數重新賦值 t.change(t.num); System.out.println("賦值之後:" + t.num); // 為引用型參數重新賦值 t.change(t); System.out.println("運算之後:" + t.num); System.out.println(); t = new ParamTest(); System.out.println("參數--引用類型"); System.out.println("原有的值:" + t.num); // 改變基本類型參數的值 t.add(t.num); System.out.println("賦引用後:" + t.num); // 改變引用類型參數所指向對象的屬性值 t.add(t); System.out.println("改屬性後:" + t.num); } } public class ParamTest { // 初始值為0 protected int num = 0; // 為方法參數重新賦值 public void change(int i) { i = 5; } // 為方法參數重新賦值 public void change(ParamTest T) { ParamTest tmp = new ParamTest(); tmp.num = 9; T = tmp; } // 改變方法參數的值 public void add(int i) { i += 10; } // 改變方法參數屬性的值 public void add(ParamTest pt) { pt.num += 20; } public static void main(String[] args) { ParamTest t = new ParamTest(); System.out.println("參數--基本類型"); System.out.println("原有的值:" + t.num); // 為基本類型參數重新賦值 t.change(t.num); System.out.println("賦值之後:" + t.num); // 為引用型參數重新賦值 t.change(t); System.out.println("運算之後:" + t.num); System.out.println(); t = new ParamTest(); System.out.println("參數--引用類型"); System.out.println("原有的值:" + t.num); // 改變基本類型參數的值 t.add(t.num); System.out.println("賦引用後:" + t.num); // 改變引用類型參數所指向對象的屬性值 t.add(t); System.out.println("改屬性後:" + t.num); } } 這段代碼的運行結果如下: 參數--基本類型 原有的值:0 賦值之後:0 運算之後:0 參數--引用類型 原有的值:0 賦引用後:0 改屬性後:20 從上面這個直觀的結果中我們很容易得出如下結論: 對於基本類型,在方法體內對方法參數進行重新賦值,並不會改變原有變數的值。 對於引用類型,在方法體內對方法參數進行重新賦予引用,並不會改變原有變數所持有的引用。 方法體內對參數進行運算,不影響原有變數的值。 方法體內對參數所指向對象的屬性進行運算,將改變原有變數所指向對象的屬性值。 上面總結出來的不過是我們所看到的表面現象。那麼,為什麼會出現這樣的現象呢?這就要說到值傳遞和引用傳遞的概念了。這個問題向來是頗有爭議的。 大家都知道,在JAVA中變數有以下兩種: 基本類型變數,包括char、byte、short、int、long、float、double、boolean。 引用類型變數,包括類、介面、數組(基本類型數組和對象數組)。 當基本類型的變數被當作參數傳遞給方法時,JAVA虛擬機所做的工作是把這個值拷貝了一份,然後把拷貝後的值傳遞到了方法的內部。因此在上面的例子中,我們回頭來看看這個方法: Java代碼 // 為方法參數重新賦值 public void change(int i) { i = 5; } // 為方法參數重新賦值 public void change(int i) { i = 5; } 在這個方法被調用時,變數i和ParamTest型對象t的屬性num具有相同的值,卻是兩個不同變數。變數i是由JAVA虛擬機創建的作用域在change(int i)方法內的局部變數,在這個方法執行完畢後,它的生命周期就結束了。在JAVA虛擬機中,它們是以類似如下的方式存儲的: 很明顯,在基本類型被作為參數傳遞給方式時,是值傳遞,在整個過程中根本沒有牽扯到引用這個概念。這也是大家所公認的。對於布爾型變數當然也是如此,請看下面的例子: Java代碼 public class BooleanTest { // 布爾型值 boolean bool = true; // 為布爾型參數重新賦值 public void change(boolean b) { b = false; } // 對布爾型參數進行運算 public void calculate(boolean b) { b = b && false; // 為了方便對比,將運算結果輸出 System.out.println("b運算後的值:" + b); } public static void main(String[] args) { BooleanTest t = new BooleanTest(); System.out.println("參數--布爾型"); System.out.println("原有的值:" + t.bool); // 為布爾型參數重新賦值 t.change(t.bool); System.out.println("賦值之後:" + t.bool); // 改變布爾型參數的值 t.calculate(t.bool); System.out.println("運算之後:" + t.bool); } } public class BooleanTest { // 布爾型值 boolean bool = true; // 為布爾型參數重新賦值 public void change(boolean b) { b = false; } // 對布爾型參數進行運算 public void calculate(boolean b) { b = b && false; // 為了方便對比,將運算結果輸出 System.out.println("b運算後的值:" + b); } public static void main(String[] args) { BooleanTest t = new BooleanTest(); System.out.println("參數--布爾型"); System.out.println("原有的值:" + t.bool); // 為布爾型參數重新賦值 t.change(t.bool); System.out.println("賦值之後:" + t.bool); // 改變布爾型參數的值 t.calculate(t.bool); System.out.println("運算之後:" + t.bool); } } 輸出結果如下: 參數--布爾型 原有的值:true 賦值之後:true b運算後的值:false 運算之後:true 那麼當引用型變數被當作參數傳遞給方法時JAVA虛擬機又是怎樣處理的呢?同樣,它會拷貝一份這個變數所持有的引用,然後把它傳遞給JAVA虛擬機為方法創建的局部變數,從而這兩個變數指向了同一個對象。在篇首所舉的示例中,ParamTest類型變數t和局部變數pt在JAVA虛擬機中是以如下的方式存儲的: 有一種說法是當一個對象或引用類型變數被當作參數傳遞時,也是值傳遞,這個值就是對象的引用,因此JAVA中只有值傳遞,沒有引用傳遞。還有一種說法是引用可以看作是對象的別名,當對象被當作參數傳遞給方法時,傳遞的是對象的引用,因此是引用傳遞。這兩種觀點各有支持者,但是前一種觀點被絕大多數人所接受,其中有《Core Java》一書的作者,以及JAVA的創造者James Gosling,而《Thinking in Java》一書的作者Bruce Eckel則站在了中立的立場上。 我個人認為值傳遞中的值指的是基本類型的數值,即使對於布爾型,雖然它的表現形式為true和false,但是在棧中,它仍然是以數值形式保存的,即0表示false,其它數值表示true。而引用是我們用來操作對象的工具,它包含了對象在堆中保存地址的信息。即使在被作為參數傳遞給方法時,實際上傳遞的是它的拷貝,但那仍是引用。因此,用引用傳遞來區別與值傳遞,概念上更加清晰。 最後我們得出如下的結論: 基本類型和基本類型變數被當作參數傳遞給方法時,是值傳遞。在方法實體中,無法給原變數重新賦值,也無法改變它的值。 對象和引用型變數被當作參數傳遞給方法時,在方法實體中,無法給原變數重新賦值,但是可以改變它所指向對象的屬性。至於到底它是值傳遞還是引用傳遞,這並不重要,重要的是我們要清楚當一個引用被作為參數傳遞給一個方法時,在這個方法體內會發生什麼。

❺ Java String引用傳遞問題

了解數據在堆棧內存中的存儲,這道問題就可以解了。
1.String對象傳入方法後,str2是局部變數,方法結束之後,局部變數值會在緩沖區中。但是並沒有修改成員變數str1的值,而輸出的仍然是str1的值,"hello"。(局部變數和成員變數是不同的變數,即使名字相同)
2.至於第二個因為類的實例化,對象可以指向該類地址,可以訪問該類的成員變數。對象指向成員變數temp,調用方法tell方法時,傳入的是Ref2對象的地址。該地址可以找到Ref2的成員變數temp。然後把"xueyuan"賦給temp,由此temp的值已經改變,方法調用結束之後,輸出的是Ref2類的已經改變值的成員變數

❻ 怎麼看到有人說java中只有值傳遞那引用傳遞呢,我拿對象做參數,這也是值傳遞

這個理論是說java的對象作為參數的時候傳遞過去的是地址的值,而不是對象本身,所以這也是值傳遞。

我感覺這個就是個文字游戲罷了,大家說的都是一樣的東西,還非要爭的你死我活。
所以我還是認為這就是引用傳遞。

❼ java string是值傳遞還是引用傳遞

java string值傳遞,可以參考如下解釋:
Java 編程語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是該對象的引用一個副本。指向同一個對象,對象的內容可以在被調用的方法中改變,但對象的引用(不是引用的副本)是永遠不會改變的。
java傳遞參數都是值,如果是對象的話,就是將引用的值復制一份給方法當參數。如果是根據引用把堆里的對象修改了,那麼對象真被修改了,不過不是被創建賦值給的那個引用修改的,是方法里的一個復制的引用副本給修改的。

❽ java中參數傳遞方式

當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞? 是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。

閱讀全文

與java只有值傳遞相關的資料

熱點內容
pythonswampy示例 瀏覽:95
有沒有什麼語音講書看書的app 瀏覽:995
文件夾怎麼做標題 瀏覽:33
騰訊雲伺服器如何防止被攻擊 瀏覽:881
六稜柱的體積演算法 瀏覽:935
淘寶什麼雲伺服器好用 瀏覽:340
pythonoa項目 瀏覽:307
android杜比音效 瀏覽:341
殺手47為什麼連接不了伺服器 瀏覽:108
靜態路徑命令 瀏覽:533
一直編譯不過怎麼辦 瀏覽:829
汽車串聯並聯演算法 瀏覽:458
助眠解壓的聲音音頻小哥哥 瀏覽:277
pythoncmd換行 瀏覽:376
linux取消行號 瀏覽:355
安卓原生系統官網是什麼 瀏覽:444
底部主圖源碼 瀏覽:878
伺服器崩了有什麼提示 瀏覽:780
遠程海康伺服器用什麼瀏覽器 瀏覽:232
解壓報紙圖片 瀏覽:956