通过void方法引用新对象

时间:2013-10-07 07:43:06

标签: java arrays

我正在处理一个处理Java数组操作的任务。现在我必须删除数组中间的元素。现在我知道数组一旦创建就无法改变长度。所以我决定创建一个新对象,并将前一个参考点指向我的新数组。

public class A{
  public static void main(String[] args){
    B test = new B(val);
    test.cut(2,4);
    test.display();
  }

class B{    
  private Obj[] array;

  B(Obj val){
    construct something
  }

  public void cut(int i, int j){
     B newObject = new B(val);
        ...
     newObject.array = this.array;
     newObject = this;
  }
}

问题在于,当我显示测试对象时,它只显示原始测试对象内容而不是newObject内容。由于这是一个void方法,我无法返回一个对象。那我如何引用新对象呢?我的cut方法的最后两行似乎根本没有效果。我知道ArrayList对于这样的事情会更好,但这是一个家庭作业,我们不得不使用数组。

3 个答案:

答案 0 :(得分:2)

  

现在我知道数组一旦创建就无法改变长度。

这是真的。

但是指向B对象实例中的数组的引用可以被更改(因为你没有声明它final) :

public void cut(int i, int j){

   Object[] newArray = new Object[len];

    //...  copying array content ...

   this.array = newArray;
}

谨防线程安全问题这种可变性原因。可变对象通常不赞成......

答案 1 :(得分:0)

如果分配规则允许使用课程Arrays,则可以使用此代替您自己的cut方法:

newArray = Arrays.copyOfRange(oldArray, from, to);

答案 2 :(得分:0)

在方法cut中,您创建了一个B的新对象,然后为其分配this引用。这没有你发现的效果,因为this引用(实际对象)根本没有改变,newObject仅在此方法中可见,一旦终止,对象就消失了。

当你在同一个类B时,你不必为了改变它所拥有的数据而创建一个新的Object。您可以创建一个新数组并将原始内容复制到该数组。

要复制内容,您可以使用方法System#arraycopy。如果你没有被允许使用任何jdk帮助功能,那么你可以循环遍历原始数组并将元素复制到新的元素中。