黑马程序员技术交流社区

标题: 我有一个基础小问题 来帮下忙阿~~ [打印本页]

作者: a337136395    时间: 2016-1-21 14:02
标题: 我有一个基础小问题 来帮下忙阿~~
public static void main(String[] args) {
                int x = 10;
                method(x);
                int[] arr = {1,2,3};
                method(arr);
                System.out.print(x+arr[0]);
            }
            public static void method(int y) {
                y=5;
            }
            public static void method(int[] arr) {
                arr[0] = 5;
            }

我自己编译了试了一下 ,结果为15,为什么是15呢???那两个方法不是没有返回值吗
作者: chenzhou    时间: 2016-1-21 23:32
在堆里改变了他的值,但是下次调用的还是被改变的值
作者: 847374032    时间: 2016-1-22 00:05
调用的作用域里的值在main函数里有使用,导致内存空间无法释放
作者: 怪我咯~    时间: 2016-1-23 20:21
涉及到了基本数据了类型和引用数据类型参数传递问题 建议你看一下毕老师的基础视频  在面向对象(第六天内容)里面老师通过画图讲的很清楚

作者: bulesky    时间: 2016-1-28 19:08
这要说道static关键字,,,被static修饰的变量和方法存储在方法区的静态区,随着类的加载而加载,,所以arr[0] = 5已经
作者: bulesky    时间: 2016-1-28 19:10
所以,arr[0]=5已经把之前的值覆盖了
作者: 洋葱头头    时间: 2016-1-29 19:27
楼主不好意思,因为在董校长那个贴中,校长设置错了黑马币分享方式,已致你获得了1000黑马币。
黑马入学需要25技术分,我们非常希望大家公平的竞争。通过自己的努力得到黑马币技术分。所以,现在已经按照规定扣掉1000黑马币,对此我们非常抱歉希望你能理解。
作者: 洋葱头头    时间: 2016-1-29 19:30
如有任何疑问,可以私密我,谢谢
作者: 小轩丶卍    时间: 2016-1-30 20:45
我就说怎么突然看到120技术分了,惊呆了。。
作者: rushing    时间: 2016-1-31 20:23
那是因为数组跟局部变量存储的地方不一样。第一个修改,方法调用完就弹栈了,第二个修改直接体现在数组当中了。所以结果为15.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2