關于陣列值的改變 為什么呼叫方法后值不變呢
public static void main(String[] args) {
String[] str={"a","b","c","d"};
test1(str);
System.out.println(str);
System.out.println(Arrays.toString(str));
}
public static void test1(String[] a){
String[] b={"1","2"};
System.out.println(b);
a=b;
}
uj5u.com熱心網友回復:
能附帶有記憶體圖解釋一下嗎? 傳入二維陣列就可以改變里面一維陣列的值 奇怪!uj5u.com熱心網友回復:
你test1方法里,a=b,直接把a引向b的地址了,在main方法里,str指向的還是原先的地址啊。你在方法里不能通過 “=”直接改啊,這改的是地址不是值uj5u.com熱心網友回復:
你可以for回圈賦值或者System.arraycop方法uj5u.com熱心網友回復:
清搜索 java 方法 值傳遞/參考傳遞這個會講的比較清楚
簡單的來說,方法的形參傳遞的是該物件地址的副本,所以你改變副本的內容是對方法體外沒有任何影響,如果你修改的是地址指向物件的內容,那就能看到.
打個比方來說,我有一張地圖,當你需要的時候,我復印了一張給你,然后你篡改了這張地圖的內容,其實對本體沒有任何影響,但你直接去把地圖上對應的房子裝修了,那就有影響了.
uj5u.com熱心網友回復:
當然基本型別和參考型別在方法傳遞上其實本質上是一樣的,只是基本型別的值就是本身,不存在指向的物件,參考型別是一個記憶體地址uj5u.com熱心網友回復:
public static void main(String[] args) {String[] str = { "a", "b", "c", "d" };
str = test1(str);
System.out.println(str);
System.out.println(Arrays.toString(str));
}
public static String[] test1(String[] a) {
String[] b = { "1", "2" };
System.out.println(b);
a = b;
return a;
}
uj5u.com熱心網友回復:
傳過來一個物件,你修改物件里的屬性,會對原物件造成影響,但你直接 物件=另一個物件,那跟原物件就沒關系了。對于陣列,你修改陣列里的值可以對原物件造成影響。二維陣列可以那是因為你修改的是二維陣列里的一維陣列,也就是二維陣列的值,而不是對二維陣列重新=
uj5u.com熱心網友回復:

這是一道簡單的java記憶體模型分析題,主要是要對java記憶體模型有一定程度掌握
uj5u.com熱心網友回復:
其實你改變的只是a,這個a是在堆疊記憶體中的一個區域變數,而str指向的是堆中的某個變數,str和a的關系就是一點,str把它的地址值給了a,無論怎么改變a中的值,都不會改變str中的值轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269860.html
標籤:Java SE
