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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Belive丶Me 中级黑马   /  2016-5-5 22:14  /  592 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo{
        public static void main(String[] args) {
                        int a = 10;
                        int b = 20;
                        System.out.println("a:"+a+",b:"+b);
                        change(a,b);
                        System.out.println("a:"+a+",b:"+b);
   
                               }   
                public static void change(int a,int b) {
                        System.out.println("a:"+a+",b:"+b);
                        a = b;
                        b = a + b;
                        System.out.println("a:"+a+",b:"+b);
                }        
}
运行结果为:
                a:10 b:20
                a:10 b:20
                a:20 b:40
                a:10 b:20
红色部分学生有疑惑,个人认为是还没有调用就弹栈了。

5 个回复

倒序浏览
宝宝想说各位大手去哪了
回复 使用道具 举报
调用方法交换2个数是不行了。 这不是C++引用传递。传递进去的是数据本身。
Java对普通类型的变量是不支持引用传递的
这里只是传进去a,b值的副本,里面副本交换对原来的a,b没有任何影响

只能用数组,或者用对象传递进去修改

点评

楼上正解  发表于 2016-5-6 22:17
回复 使用道具 举报
int型为基本数据类型,参数传递时属于值传递,值传递,也就是说传入方法的参数只是原先数据的副本,跟原先数据没有关系,所以方法体中对传入参数的更改不会影响原先的数据。
回复 使用道具 举报
因为基本数据类型在change()方法里传的只是副本,对原来值是没影响的,即不改变原来的值。
但是如果是引用数据类型的话,因为传的是地址,change()方法里面值改变的话,引用的值也会改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马