常见错误4# :自编代码来拷贝数组

来源:北大青鸟飞迅校区|发布时间:2013-04-18 19:03:39

  Jython的发展之道:性能,性能,性能!常见错误4# :自编代码来拷贝数组

  Java允许你克隆数组,但是开发者通常会错误地编写如下的代码,问题在于如下的循环用三行做的事情,如果采用Object的clone方法用一行就可以完成:

  1. public class Example{

  2. private int[] copy;

  3. /*** Save a copy of ’data’. ’data’ cannot be null.*/

  4. public void saveCopy (int[] data){

  5. copy = new int[data.length];

  6. for (int i = 0; i < copy.length; ++i)

  7. copy[i] = data[i];

  8. }

  9. }

  这段代码是正确的,但却不必要地复杂。saveCopy()的一个更好的实现是:

  1. void saveCopy (int[] data){

  2. try{

  3. copy = (int[])data.clone();

  4. }catch (CloneNotSupportedException e){

  5. // Can’t get here.

  6. }

  7. }

  如果你经常克隆数组,编写如下的一个工具方法会是个好主意:

  1. static int[] cloneArray (int[] data){

  2. try{

  3. return(int[])data.clone();

  4. }catch(CloneNotSupportedException e){

  5. // Can’t get here.

  6. }

  7. }

  这样的话,我们的saveCopy看起来就更简洁了:

  1. void saveCopy (int[] data){

  2. copy = cloneArray ( data);

  3. }

  五、常见错误5#:拷贝错误的数据

  有时候程序员知道必须返回一个拷贝,但是却不小心拷贝了错误的数据。由于仅仅做了部分的数据拷贝工作,下面的代码与程序员的意图有偏差:

  1. import java.awt.Dimension;

  2. /*** Example class. The height and width values should never * be

  3. negative. */

  4. public class Example{

  5. static final public int TOTAL_VALUES = 10;

  6. private Dimension[] d = new Dimension[TOTAL_VALUES];

  7. public Example (){ }

  8.

  9. /*** Set height and width. Both height and width must be nonnegative * or an exception will be thrown. */

  10. public synchronized void setValues (int index, int height, int width) throws IllegalArgumentException{

  11. if (height < 0 || width < 0)

  12. throw new IllegalArgumentException();

  13. if (d[index] == null)

  14. d[index] = new Dimension();

  15. d[index].height = height;

  16. d[index].width = width;

  17. }

  18. public synchronized Dimension[] getValues()

上一篇:C#开发中的两个基本原则
下一篇:C#一维数组和多维数组有何异同?

热门话题

招生热线: 4008-0731-86 / 0731-82186801

学校地址: 长沙市天心区团结路6号

Copyright © 2006 | 湖南大计信息科技有限公司 版权所有

湘ICP备14017520号-3

关注我们
在线咨询
嘿,我来帮您!