import java.util.Arrays;
public class AnimalsDemo{
public static void main(String[] args){
Animal[] animals = new Animal[2];
animals[0] = new Animal("dog");
animals[1] = new Animal("cat"); add(animals,new Animal("bird"));
System.out.println(Arrays.toString(animals));
}
public static void add(Animal[] animals,Animal animal){
if(animals!=null){
animals=Arrays.copyOf(animals,animals.length+1);
animals[animals.length-1] = animal;
}else{
System.out.println("数组为空");
}
}
}
class Animal{
String name;
public Animal(String name){
this.name = name;
}
public String toString(){
return this.name;
}
}
最后输出的结果是[dog,cat],调用add()方法没有达到扩容效果,为什么?求大虾帮帮忙,谢谢!
public class AnimalsDemo{
public static void main(String[] args){
Animal[] animals = new Animal[2];
animals[0] = new Animal("dog");
animals[1] = new Animal("cat"); add(animals,new Animal("bird"));
System.out.println(Arrays.toString(animals));
}
public static void add(Animal[] animals,Animal animal){
if(animals!=null){
animals=Arrays.copyOf(animals,animals.length+1);
animals[animals.length-1] = animal;
}else{
System.out.println("数组为空");
}
}
}
class Animal{
String name;
public Animal(String name){
this.name = name;
}
public String toString(){
return this.name;
}
}
最后输出的结果是[dog,cat],调用add()方法没有达到扩容效果,为什么?求大虾帮帮忙,谢谢!
public class AnimalsDemo{
public static void main(String[] args){
Animal[] animals = new Animal[2];
animals[0] = new Animal("dog");
animals[1] = new Animal("cat"); add(animals,new Animal("bird"));
System.out.println(Arrays.toString(animals)+":"+animals.length);
}
public static void add(Animal[] animals,Animal animal){
if(animals!=null){
animals=Arrays.copyOf(animals,animals.length+1);
animals[animals.length-1] = animal;
System.out.println(animals.length+"----------");
}else{
System.out.println("数组为空");
}
}
}
class Animal{
String name;
public Animal(String name){
this.name = name;
}
public String toString(){
return this.name;
}
}
执行下吧,就知道问题在哪了。
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}这个代码说明了2个问题
1 Arrays.copyOf(animals,animals.length+1) 并不能实现扩容
2 方法返回的是新new出来的对象 不是原来形参传入的对象
add方法需要有Animal[]类型的返回值,用来获得新生成的数组Animal[] copy = new Animal[animals.length+1];
System.arraycopy(animals, 0, copy, 0, animals.length);
copy[copy.length-1] = animal;
return copy;还有很多奇葩的方法,比如说可以把数组转换成List然后添加完对象之后再转回数组