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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下。  引用函数时,必须要用实参。但要怎么处理,才能交换变量值呢?????????
public static void main(String[] args){       
        int a = 10;
        int b = 20;
        swap( a, b);
        System.out.println("交换后,a =" + a +" , b =" + b);
        }
        //自定义的交换方法
        public static void swap(int a, int b) {
                int temp = 0;
                  temp = a;
                  a = b;
                  b = temp;
        }

11 个回复

倒序浏览
6666666666666666666666666666666666666666666
回复 使用道具 举报
6666666666666666666666666666666666666666666
回复 使用道具 举报
cat73 黑马帝 2016-7-17 20:46:53
板凳
这在 Java 中是不可能做到的。。。
回复 使用道具 举报
cat73 黑马帝 2016-7-17 20:52:19
报纸
本帖最后由 cat73 于 2016-7-17 20:53 编辑

这种调用真的是传的值。。。
到了函数内这俩参数跟函数外的变量没有任何关系。。。

妮真的想做到的话。。。
我有几个思路。。。
1. ASM 库改 class
2. Hook System.out
3. 搞明白 JVM 的内存分配,从栈上直接替换这俩变量的值
回复 使用道具 举报
cat73 黑马帝 2016-7-17 20:53:26
地板
第二种思路可以参考我的这篇帖子:
http://bbs.itheima.com/thread-171478-1-1.html
回复 使用道具 举报
Buer 来自手机 中级黑马 2016-7-17 23:25:40
7#
cat73 发表于 2016-7-17 20:52
这种调用真的是传的值。。。
到了函数内这俩参数跟函数外的变量没有任何关系。。。


刚学到数组,面向对象学懂了再来研究你的话
回复 使用道具 举报
其实你也可以试试这样~~~
        public static void swap(int a, int b) {
                a = a + b;
                b = a - b;
                a = a - b;
        }
或者这样~~~
        public static void swap(int a, int b) {
                a = a ^ b;
                b = a ^ b;
                a = a ^ b;
        }

点评

然而并没有什么卵用,方法外的变量一点也不会受影响。。而且这样比临时变量更慢。。  发表于 2016-7-18 00:53
回复 使用道具 举报
class Demo
{
        public static void main(String[] args)
        {
                class Swap
            {
                        void show(int a,int b)
                        {
                                int temp=a;
                                a=b;
                                b=temp;
                                System.out.println("交换后,a =" + a +" , b =" + b);
                        }       
                }
                Swap s=new Swap();
                s.show(10,20);
    }
        
}
回复 使用道具 举报
你没有弄清楚复制传值和地址传值的区别,你这样定义只是复制了一份a和b到swap函数中,原来的a和b并没有和swap函数中的a和b产生任何联系。所以交换不成功。
回复 使用道具 举报
Buer 来自手机 中级黑马 2016-7-18 12:06:53
11#
HEBEIREN 发表于 2016-7-18 08:18
你没有弄清楚复制传值和地址传值的区别,你这样定义只是复制了一份a和b到swap函数中,原来的a和b并没有和sw ...

求教,地址传值需要用到什么知识呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马