java傳遞引用
『壹』 java String引用傳遞問題
了解數據在堆棧內存中的存儲,這道問題就可以解了。
1.String對象傳入方法後,str2是局部變數,方法結束之後,局部變數值會在緩沖區中。但是並沒有修改成員變數str1的值,而輸出的仍然是str1的值,"hello"。(局部變數和成員變數是不同的變數,即使名字相同)
2.至於第二個因為類的實例化,對象可以指向該類地址,可以訪問該類的成員變數。對象指向成員變數temp,調用方法tell方法時,傳入的是Ref2對象的地址。該地址可以找到Ref2的成員變數temp。然後把"xueyuan"賦給temp,由此temp的值已經改變,方法調用結束之後,輸出的是Ref2類的已經改變值的成員變數
『貳』 JAVA基礎問題,到底是值傳遞還是引用傳遞
java中方法參數傳遞方式是按值傳遞。所謂值傳遞,就是將實際參數值的副本(復製品)傳入方法內,而自己本身不會受到任何影響。
如果參數是基本類型,傳遞的是基本類型的字面量值的拷貝。
『叄』 java方法參數怎麼引用傳遞boolean
Java中的參數傳遞:分為值傳遞和引用傳遞
但本質上,Java中只有值傳遞。引用傳遞,其實可以理解為傳的是類似指針的東西。
值傳遞就是把基本變數的值拷貝一份,傳遞這個拷貝。引用傳遞則是傳遞的引用的地址,也就是該變數在內存空間的地址。
1.值傳遞
只有基本數據類型採用值傳遞,特點是傳遞的是值的拷貝,傳遞完後兩者就沒有關系了。也就是說方法內和方法外的值互不相干
基本數據類型:
·整型:int,long,byte,short
浮點型:float,double
字元型:char
布爾型:boolean
註:8種基本數據類型以外的數據類型都為引用類型。
2.引用傳遞
指的是在方法調用時,傳遞的參數是按引用進行傳遞,其實傳遞的引用的地址,也就是變數所對應的內存空間的地址。
傳遞的是一個拷貝,即副本。也就是說,對於一個參數傳遞,存在兩個地址指向同一個內存空間。這里我們可以用內存分配示意圖來體現
3.String類型傳遞
先說結論,String類型傳遞與基本數據類型的傳遞效果相似。
說明:
String類對象一旦創建,其內容不可更改:
String類的所有方法都不會改變String類對象內容,要改變String類對象的值就必須創建一個新的String對象。
也就是說,當進行參數傳遞時,如果方法內對String類對象的值進行了修改,那麼實際上是創建了一個新的String類對象,然後讓原來的變數指向它而已。但是這個「原來的變數」是一份拷貝副本,只是一開始創建的時候與主方法中的傳遞的值相同而已,現在改變之後,兩者就毫無關系了。
『肆』 java類方法如何實現引用傳遞和值傳遞
參數是基本類型就是傳值,傳對象就是引用傳遞。
swap(Integer x, Integer y)可以傳遞引用,但是沒辦法實現交換。這跟Integer的實現方式有關。所以不是引用傳遞就一定能改變外面的值。
下面是引用傳遞,交換的情況,又臭又長。
classUntitled{
intneedFix;
publicstaticvoidswap(Untitledx,Untitledy){
inttemp=x.needFix;
x.needFix=y.needFix;
y.needFix=temp;
}
publicstaticvoidmain(String[]args){
Untitle1=newUntitled();
Untitle2=newUntitled();
u1.needFix=3;
u2.needFix=4;
swap(u1,u2);
System.out.println(u1.needFix+","+u2.needFix);
}
}
另外,你可以考慮一下引用傳遞,不過也是一種傳值,java裡面沒有事實上的指針。直接交換引用指向的對象是沒有作用的。
Untitledtemp=x;
x=y;
y=temp;
無效。
『伍』 分析java中有沒有引用傳遞
java中沒有引用傳遞,只存在值傳遞。
值傳遞:是對所傳遞參數進行一次副本拷貝,對參數的修改只是對副本的修改,函數調用結束,副本丟棄,原來的變數不變(即實參不變);引用傳遞:參數被傳遞到函數時,不復制副本,而是直接將參數自身傳入到函數,函數內對參數的任何改變都將反映到原來的變數上。
我們經常看到對於對象(數組,類,介面)的傳遞似乎有點像引用傳遞,可以改變對象中某個屬性的值。但是不要被這個假象所蒙蔽,實際上這個傳入函數的值是對象引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。