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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这两天 学习了基本数据类型和部分引用数据类型(数组)。 并且老师的视频中也有例子如下:class Test3_Array {
        public static void main(String[] args) {
                /*int a = 10;
                int b = 20;
                System.out.println("a:"+a+",b:"+b);                        //a = 10,b = 20
                change(a,b);
                System.out.println("a:"+a+",b:"+b);                        //?*/

                int[] arr = {1,2,3,4,5};
                change(arr);
                System.out.println(arr[1]);
        }

        public static void change(int a,int b) {                //a = 10, b= 20
                System.out.println("a:"+a+",b:"+b);                        //a = 10,b = 20
                a = b;                                                                                //a = 20
                b = a + b;                                                                        //b = 40
                System.out.println("a:"+a+",b:"+b);                        //a = 20, b = 40
        }
        public static void change(int[] arr) {                        //1,4,3,8,5
                for(int x=0; x<arr.length; x++) {
                        if(arr[x]%2==0) {
                                arr[x]*=2;
                        }
                }
        }
}



上面的执行结果发现 change(a,b);对原参数不起作用,只是交换函数中的临时变量的值,那么该如何用函数实现两个数的交换呢?
带着疑问,今天开始了探索。
之前接触过C, 记得C语言可以通过函数传递需要交换的两个值得地址,就可以实现这个功能,函数代码如下:
void swap(int *i, int *j)
{  
    int temp;  
    temp=*i;  
    *i=*j;  
    *j=temp;  
}  

这种方式在Java中肯定不能用,因为Java不支持指针。
记得C++中还有一种引用的实现方法,代码如下:
void swap(int &i, int &j)
{  
    int temp;  
    temp=i;  
    i=j;  
    j=temp;  
}  

测试了一下上面这种方式,编译报错, Java应该也是不支持这种类型的编程。
那么,难道Java 就真的不支持 以函数的方式实现该功能吗? 求教大神,帮忙答疑解惑,万分感谢。



16 个回复

倒序浏览
总结得真好
回复 使用道具 举报
我是来学习的  
回复 使用道具 举报
编译报错不代表不支持哦
1、
  1. class test1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1;
  6.                 int y=2;
  7.                 int temp=0;
  8.                
  9.                 temp = x;
  10.                 x = y;
  11.                 y = temp;
  12.                 System.out.println(x+","+y);
  13.         }
  14. }
复制代码

2、
  1. class test2       
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1;
  6.                 int y=2;
  7.                 int array[]=swap(x, y);
  8.                 System.out.println(array[0]+" "+array[1]);       
  9.         }
  10.         public static int[] swap(int a,int b)
  11.         {
  12.                 int tmp;
  13.                 tmp=a;
  14.                 a=b;
  15.                 b=tmp;
  16.                 return new int[]{a,b};
  17.         }
  18. }
复制代码

3、
  1. class test3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1;
  6.                 int y=2;
  7.                 x=x+y;
  8.                 y=x-y;
  9.                 x=x-y;
  10.                 System.out.println(x+" "+y);
  11.         }
  12. }
复制代码

4、
  1. class test4
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=1;
  6.                 int y=2;
  7.                 x=x^y;
  8.                 y=x^y;
  9.                 x=x^y;
  10.                 System.out.println(x+" "+y);
  11.         }
  12. }
复制代码


新手第一次发  嘿嘿

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报 2 0
楼上的总结很全面啊!赞一个!
回复 使用道具 举报
a=a+b-(b=a);
回复 使用道具 举报
csw502 初级黑马 2015-11-22 21:15:31
7#
a=a^b;
b=a^b;
a=a^b;
回复 使用道具 举报
这新手的水可不低啊
回复 使用道具 举报
不知道啊!!!!!!
回复 使用道具 举报
a=a+b;
b=a-b;
a=a-b;
好了
回复 使用道具 举报

这种方式只使用INT,STRING就不行了。。
回复 使用道具 举报
我是来学习的的的的的啊的啊的啊
回复 使用道具 举报
笑出了翔 发表于 2015-11-23 23:31
这种方式只使用INT,STRING就不行了。。

这两种方式我不懂
回复 使用道具 举报
上面发的都不是 以函数的方式实现的
回复 使用道具 举报
ppaapc 中级黑马 2015-11-24 22:07:03
15#
有点意思
回复 使用道具 举报
yubail 来自手机 中级黑马 2015-11-24 22:28:13
16#
基本数据类型的变量是不支持用函数交换的,并且交换用一行就可以实现,何必用函数    a=b+(b=a)*0;
回复 使用道具 举报
一般来说基本数据类型在不改变其值得话都是不会变的,上面说的两种方法x=x+y和x=x^y都直接改变了x和y的值
引用数据类型除了String类型,其他引用数据类型都是可以通过方法改变其值的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马