关于数组值的改变 为什么调用方法后值不变呢

我真不脱发 2021-03-26 01:19:16
关于数组值的改变 为什么调用方法后值不变呢
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;

}
...全文
693 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
得一以生 2021-05-11
  • 打赏
  • 举报
回复
public static void test1(String[] a){ a[0] = "1"; a[1] = "2"; a[2] = "3"; a[3] = "4"; System.out.println(a); } 这样a里面的值就可以变了
好烦吃不胖 2021-03-26
  • 打赏
  • 举报
回复
其实你改变的只是a,这个a是在栈内存中的一个局部变量,而str指向的是堆中的某个变量,str和a的关系就是一点,str把它的地址值给了a,无论怎么改变a中的值,都不会改变str中的值
好烦吃不胖 2021-03-26
  • 打赏
  • 举报
回复
这是一道简单的java内存模型分析题,主要是要对java内存模型有一定程度掌握
立青_ 2021-03-26
  • 打赏
  • 举报
回复
传过来一个对象,你修改对象里的属性,会对原对象造成影响,但你直接 对象=另一个对象,那跟原对象就没关系了。 对于数组,你修改数组里的值可以对原对象造成影响。二维数组可以那是因为你修改的是二维数组里的一维数组,也就是二维数组的值,而不是对二维数组重新=
gaojun15173 2021-03-26
  • 打赏
  • 举报
回复
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; }
maradona1984 2021-03-26
  • 打赏
  • 举报
回复
当然基本类型和引用类型在方法传递上其实本质上是一样的,只是基本类型的值就是本身,不存在指向的对象,引用类型是一个内存地址
maradona1984 2021-03-26
  • 打赏
  • 举报
回复
清搜索 java 方法 值传递/引用传递 这个会讲的比较清楚 简单的来说,方法的形参传递的是该对象地址的副本,所以你改变副本的内容是对方法体外没有任何影响,如果你修改的是地址指向对象的内容,那就能看到. 打个比方来说,我有一张地图,当你需要的时候,我复印了一张给你,然后你篡改了这张地图的内容,其实对本体没有任何影响,但你直接去把地图上对应的房子装修了,那就有影响了.
立青_ 2021-03-26
  • 打赏
  • 举报
回复
你可以for循环赋值或者System.arraycop方法
立青_ 2021-03-26
  • 打赏
  • 举报
回复
你test1方法里,a=b,直接把a引向b的地址了,在main方法里,str指向的还是原先的地址啊。你在方法里不能通过 “=”直接改啊,这改的是地址不是值
我真不脱发 2021-03-26
  • 打赏
  • 举报
回复
能附带有内存图解释一下吗? 传入二维数组就可以改变里面一维数组的值 奇怪!

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧