设为首页 加入收藏

TOP

慎用java的多维数组
2014-11-23 22:12:36 】 浏览:481
Tags:慎用 java 多维

  前一段时间做的一个项目中,有一处用到了一个多维数组来保护页面的状态。


  这个数组所为一个javaBean对象的属性存在,这个javaBean对象被保存在session中,我在修改jsp页面的时候,需要对数组中的一些值做转换。原来代码是这样的:


  String [][] inputData = new String [5][24];


  inputData = xxxjavaBean.getSendItem();


  我在后面修改的时候,改变了inputDate的中的值。结果品质部在测试的时候,发现有一个页面的状态到了第三个页面去,在返回来的时候就无法记录原来的状态。用debug调试,问题处在保存在session中的javaBean对象值被修改了,我找了一个上午都没有找到问题所在,所有可能修改session中值得地方,(.java文件)我都找遍了。后来在看jsp页面的时候,发现了这里有个多维数组,才想起来,java中的数组是引用传递。我在jsp页面上修改的数据,其实修改的是session中的数据。从而造成了这bug的出现。


  1.可以使用循环,将整个数组的元素值遍历一遍,并指定给另一个数组相对应的索引位置


  int[] arr1 = {1, 2, 3, 4, 5};


  int[] arr2 = new int[5];


  for(int i = 0; i < arr1.length; i++) {


  arr2[i] = arr1[i];


  }


  2.使用System类提供的arraycopy()方法


  int[] arr1 = {1, 2, 3, 4, 5};


  3.使用数据的clone()方法


  int[] arr1 = {1, 2, 3, 4, 5};


  int[] arr2 = new int[];


  arr2 = (int[])arr1.clone();


  对于单维数组这三种方法都是没有问题的,对于多维数组第二第三种方法就会出现问题,到的新数组还是应用传递,而不是值传递,因为java中的克隆是浅层克隆。所以用第二第三种方法的时候,也要以单维的形式进行,才能到达值拷贝的结果。


  所以:


  多维情况下:


  1.


  int[][] arr1 = {{1,2,3,4,5},{1,2,3,4,5}};


  int [][] arr2=new int[2][5];


  for(int i=0;i


  System.arraycopy(arr1[i], 0, arr2[i], 0, arr1[i].length);


  }


  2.


  int[][] arr1 = {{1,2,3,4,5},{1,2,3,4,5}};


  int [][] arr2=new int[2][5];


  for(int i=0;i


  arr2[i]=(int[])arr1[i].clone();


  }


  int[] arr2 = new int[5];


  System.arraycopy(arr1, 0, arr2, 0, arr1.length);


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇pdf生成的解决方案(H2p)之H2P展.. 下一篇Java源代码的折行规则

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目