关于数组值的改变 为什么调用方法后值不变呢
关于数组值的改变 为什么调用方法后值不变呢public static void main(String[] args) {
String[] str={"a","b","c","d"};
test1(str);
System.out.println(str);
System.out.println(Arrays.toString(str));
}
publicstaticvoid test1(String[] a){
String[] b={"1","2"};
System.out.println(b);
a=b;
}<img src="https://img-bbs.csdn.net/upload/202103/26/1616735909_875737.png" alt="">
能附带有内存图解释一下吗?传入二维数组就可以改变里面一维数组的值 奇怪! 你test1方法里,a=b,直接把a引向b的地址了,在main方法里,str指向的还是原先的地址啊。你在方法里不能通过 “=”直接改啊,这改的是地址不是值
你可以for循环赋值或者System.arraycop方法 清搜索 java 方法 值传递/引用传递
这个会讲的比较清楚
简单的来说,方法的形参传递的是该对象地址的副本,所以你改变副本的内容是对方法体外没有任何影响,如果你修改的是地址指向对象的内容,那就能看到.
打个比方来说,我有一张地图,当你需要的时候,我复印了一张给你,然后你篡改了这张地图的内容,其实对本体没有任何影响,但你直接去把地图上对应的房子装修了,那就有影响了.
当然基本类型和引用类型在方法传递上其实本质上是一样的,只是基本类型的值就是本身,不存在指向的对象,引用类型是一个内存地址 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;
} 传过来一个对象,你修改对象里的属性,会对原对象造成影响,但你直接 对象=另一个对象,那跟原对象就没关系了。
对于数组,你修改数组里的值可以对原对象造成影响。二维数组可以那是因为你修改的是二维数组里的一维数组,也就是二维数组的值,而不是对二维数组重新 其实你改变的只是a,这个a是在栈内存中的一个局部变量,而str指向的是堆中的某个变量,str和a的关系就是一点,str把它的地址值给了a,无论怎么改变a中的值,都不会改变str中的值 publicstaticvoid test1(String[] a){
a = "1";
a = "2";
a = "3";
a = "4";
System.out.println(a);
}
这样a里面的值就可以变了
页:
[1]