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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 留不下什么 于 2013-9-20 21:10 编辑

class Demo {
       public static voidmain(String[] args) {
              int a=12,b=23;
              System.out.println("a="+a+",b="+b);
              change(a,b);
              System.out.println("a="+a+",b="+b);
              
              int[] arr ={1,2,3,4,5};
              printArray(arr);
              System.out.println("操作后");
              change(arr);
              printArray(arr);
              
       }
       public static voidchange(int a,int b){
              System.out.println("a="+a+",b="+b);
              a = a + b;
              b = 10;
              System.out.println("a="+a+",b="+b);
       }
       public static voidchange(int[] arr){
              for(int x=0;x<arr.length; x++){
                     if(arr[x]%2==0){
                            arr[x]*=2;
                     }
              }
       }
       public static voidprintArray(int[] arr) {
              for (int x = 0;x < arr.length ;x++ ){
                     System.out.print(arr[x]+ " ");
              }
       }
}
a=12,b=23
a=12,b=23
a=35,b=10
a=12,b=23
1 2 3 4 5 操作后
1 4 3 8 5



为什么 public static void change(int[] arr) 没有返回改变后的数组给主函数,
但是主函数再调用 public static void printArray(int[] arr) 函数的时候,却把更改后的数组传给了它?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

5 个回复

倒序浏览
楼主请看清楚,你标记了操作后的数组,实际上遍历的是操作前的数组,change(arr);下面的才是操作后的数组。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
  1. class D9 {
  2.     public static void main(String[] args) {
  3.          int[] arr={1,2,3} ;int x=0;
  4.          System.out.println("arr[2]="+arr[2]+".....x="+x);
  5.          System.out.println("改后");
  6.          change(arr,x);
  7.          System.out.println("arr[2]="+arr[2]+".....x="+x);
  8.            
  9.     }
  10.     public static void change(int[] arr,int x)
  11.     {
  12.             for(int a=0;a<arr.length;a++)
  13.                     arr[a]+=1;
  14.                     x+=1;
  15.     }
  16. }
复制代码
我想应该是数组的什么特性吧,我也试了好多个,还是一样
坐等大神来解答。
有答案了回我一个。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
两次打印分别是原数组和做了修改后的
回复 使用道具 举报
数组是引用类型,传的是地址
回复 使用道具 举报 1 0
数组调用了改变方法,就是使用这个方法改变自身的属性,如修改了自身的元素值,改变了之后就不可还原,如果用完这个方法之后数组在主函数内还是没有变,那么就必须需要有一个返回数组才能确保数组已改变了,但是返回值和不一定和数组相关的,例如改变完数组之后返回一个整数1。返回值就是在调用函数后可以立刻返回的数据,就好像如果改变方法有返回值的,例如可以改变数组之后可以返回一个数组,那么调用printArray();方法的时候就可以这样写:printArray(change(arr));就不不需要分开两个语句写。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马