1. (java語言) 函數參數使用int[][]類型,為什麼改變形參的值,實參也會改變
tmpMatrix 和 inputMatrix 實際指向的是一個堆里的對象a.
所以你要讓tmpMatrix指向的對象和inputMatrix不同.
int[][] tmpMatrix = new int[9][9];
然後根據inputMatrix賦一樣的值給tmpMatrix
2. JAVA里怎麼樣在調用方法時同時改變實參的值
使用可變對象,比如List,Map這些。如果傳入基本類型或者String這樣的不可變對象是沒辦法的。
3. java如何改變實參
1.這樣的方法在Java里永遠也實現不了
2.對於基本類型按值傳遞,對象類型按引用傳遞
3.Java引用的傳遞與C++指針不同,指針即地址,而引用是存儲指針的變數
這么說你可能還會糊塗,舉個例子:
//比如有兩個對象:
Integer a=new Integer(1);
Integer b=new Integer(2);
//還有一個方法,類似你上面寫的,不同的是這里傳遞的是對象引用
public void swap(Integer a,Integer b){
Integer c=a;
a=b;
b=c;
}
//如果你調用了swap方法
swap(a,b);
//可能你認為是直接把a,b的引用直接傳遞給swap方法,其實並非如此
//Java在傳遞引用時,實際上後台會先復制引用,例如上面就會復制a,b的兩個引用a1,b1,然後將a1和b1作為參數傳遞過去
//執行方法以後,a1指向對象b,b1指向對象a,而引用a和b並沒有改變
//對於一個類的私有屬性是可以交換的
public class Swap{
private int a;
private int b;
public Swap(int a,int b){
this.a=a;
this.b=b;
}
public void swap(){
int temp=this.a;
this.a=this.b;
this.b=temp;
}
public int getA(){
return a;
}
public int getB(){
return b;
}
}
//////////////////////測試程序
public class TestSwap {
public static void main(String[] args) {
Swap swap=new Swap(1,2);
swap.swap();
System.out.println(swap.getA()+" "+swap.getB());
}
}
4. java中如何使形參改變實參
1.形參變數只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數後則不能再使用該形參變數。
2.實參可以是常量、變數、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生「類型不匹配」的錯誤。
5. Java中如何改變參數的值(實現按址傳遞)
java方法中傳值和傳引用的問題是個基本問題,但是也有很多人一時弄不清。你的題目本身就有歧義,無法直接針對題目作答(因為java不存在類似c或c++那樣的傳址)。我從頭講起:
(一)基本數據類型:傳值,方法不會改變實參的值。
(二)對象類型參數:傳引用,方法體內改變形參引用,不會改變實參的引用,但有可能改變實參對象的屬性值。例如
public class TestFun4 {
public static void testStringBuffer(StringBuffer sb){
sb.append("java");//改變了實參的內容
}
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("my ");
new TestFun4().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//內容變化了
}
}
6. java中怎麼對實參的值進行修改
這個就看傳入的參數是改變地址還是改變地址的值了。
你的change(Object o)方法是把原有的引用指向了一個新的地址,所以該改變只是在該方法內生效。
所謂的對實參的值進行修改其實就是對地址值的修改~
7. Java集合類對象作為實參在方法體內被修改後,它方法體外的自己怎麼也被修改了
你糾結的應該是:System.out.println(link.size());//此處結果為0,為什麼是0啊?
原因:
當 LinkedList link=new LinkedList();
link.add("111");link.add("222");link.add("333");執行時,
jvm分配了一個內存地址存放的是[111,222,333] 指向的變數 link,(確切的說是變數link指向內存地址)
當 LinkedList linktemp=link; 執行時,jvm又將上一次分配的內存地址 指向了 變數 linktemp,
也就是 倆個不同的變數,倆個不同的引用,指向了同一個內存地址。即,無論操作link,linktemp 的哪一個,對倆個都有影響!
剛才想到,總聽說java沒有引用傳遞
LinkedList linklist=new LinkedList();
LinkedList linktemp=link;
System.out.println(linktemp == link ); 輸出結果為true 證明,他們是一個內存地址!
我不是什麼大神!,如果答的不對請諒解,我只是發表下自己的看法!
8. java編程中怎麼使方法中基本數據類型改變時同時改變實參的值
java和c﹢﹢不一樣 在c中可以定義同名的局部及全局變數 在java中就不可以 因此你引用是不能成功的 因為在java中的局部變數會被垃圾回收器清理 所以你只能在外部將實參設置成全局 通過在方法內改變形參後再賦值給實參就ok了
9. java中實參傳遞給形參,實參值會不會改變
形參永遠不改變實參。
如果傳的是容器如Map、List等,容器本身的指向是不能改變的,但可以改變容器內的內容