JAVA 值传递问题

yajiuqiulu676 2017-01-09 10:04:01
请教各位大神,我做leetcode 48题的时候发现一个问题,关于值传递的。
代码如下:
public void rotate(int[][] matrix) {
int total = matrix.length - 1;
int [][] res = new int[matrix.length][matrix.length];

for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
res[j][total - i] = matrix[i][j];
}
}
matrix = res;
}

提交的时候发现,传入的matrix的值并没有改变,但是如果我直接在方法中对matrix[i][j]赋值,matrix的值就会改变,这是为什么呢?
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yajiuqiulu676 2017-01-10
  • 打赏
  • 举报
回复
谢谢大家了。
一笑·奈何 2017-01-09
  • 打赏
  • 举报
回复
这个是内存地址的问题,matrix本身是一个局部变量,指向调用他的数组,然后你又在函数里创建一个数组,然后把地址赋给matrix,函数运行完之后内存释放,根本没有改变调用他的数组的内容,
yajiuqiulu676 2017-01-09
  • 打赏
  • 举报
回复
有大神吗?诚心求助
bigbaldy 2017-01-09
  • 打赏
  • 举报
回复
通俗来讲,函数内的matrix与你调用时传给函数的matrix不是一个变量,也就是形参与实参虽然他们的值相同,但是地址不同,matrix = res改变的是形参的值,实参的值当然不会变
ichavin 2017-01-09
  • 打赏
  • 举报
回复
同意2L说的,自己有点想不通,形参拿的是正真数组的引用的地址,如果直接修改形参数组内元素的内容是可以直接使正真的数组生效的,但是通过new 的方式再赋值给形参就不行了,不知道是否是不能改变形参所引用的地址?
wins22237 2017-01-09
  • 打赏
  • 举报
回复
可以这么理解,matrix是一个二维数组指针,而matrix[i][j]是一个int类型的值
yajiuqiulu676 2017-01-09
  • 打赏
  • 举报
回复
引用 2 楼 u014325121 的回复:
这个是内存地址的问题,matrix本身是一个局部变量,指向调用他的数组,然后你又在函数里创建一个数组,然后把地址赋给matrix,函数运行完之后内存释放,根本没有改变调用他的数组的内容,
那意思是,我函数内的matrix只是地址的一个副本,我只改变了函数里的matrix的指向,函数外的matrix指向的原数组还是没变???

62,628

社区成员

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

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