A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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呢???那两个方法不是没有返回值吗

9 个回复

倒序浏览
在堆里改变了他的值,但是下次调用的还是被改变的值
回复 使用道具 举报
调用的作用域里的值在main函数里有使用,导致内存空间无法释放
回复 使用道具 举报
涉及到了基本数据了类型和引用数据类型参数传递问题 建议你看一下毕老师的基础视频  在面向对象(第六天内容)里面老师通过画图讲的很清楚
回复 使用道具 举报
这要说道static关键字,,,被static修饰的变量和方法存储在方法区的静态区,随着类的加载而加载,,所以arr[0] = 5已经
回复 使用道具 举报
所以,arr[0]=5已经把之前的值覆盖了
回复 使用道具 举报
楼主不好意思,因为在董校长那个贴中,校长设置错了黑马币分享方式,已致你获得了1000黑马币。
黑马入学需要25技术分,我们非常希望大家公平的竞争。通过自己的努力得到黑马币技术分。所以,现在已经按照规定扣掉1000黑马币,对此我们非常抱歉希望你能理解。
回复 使用道具 举报
如有任何疑问,可以私密我,谢谢
回复 使用道具 举报
我就说怎么突然看到120技术分了,惊呆了。。
回复 使用道具 举报
那是因为数组跟局部变量存储的地方不一样。第一个修改,方法调用完就弹栈了,第二个修改直接体现在数组当中了。所以结果为15.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马