黑马程序员技术交流社区
标题:
数组赋值的问题
[打印本页]
作者:
罗雪梅
时间:
2012-9-18 22:25
标题:
数组赋值的问题
本帖最后由 罗雪梅 于 2012-9-21 13:54 编辑
模仿的是arrayList的底层实现,其中标红色的话句都是把数组中的元素操作给另一个,但是一个是整体就赋过去了,另一个则遍历过去的,我试了把2下面遍历的语句换成和第一句一样的,也可以达到一样的效果,但不是明白为什么不用遍历就能直接这样做???
class MyList
{
private Object[] old;
private int size=0;
public MyList(){
this(10);
}
public MyList(int init){
old=new Object[init];
}
public void add(Object obj){
changeArraySize();
old[size++]=obj;
}
private void changeArraySize(){
Object[] oldArr=old;
//将old数组中的内容保存
int length=oldArr.length+(int)(oldArr.length*0.5); //根据old数组长度得到一个新长度 50%
old=new Object[length]; //old重新定义,长度增长
for(int i=0;i<size;i++){ //oldArr 中的元素赋值给old
old
=oldArr
;
}
}
public Object get(int index){
return old[index];
}
public int size(){
return size;
}
public String toString(){
StringBuilder build=new StringBuilder();
build.append("[");
for(int i=0;i<size;i++){
if(i==size-1){
build.append(old
);
}else{
build.append(old
).append(",");
}
}
build.append("]");
return build.toString();
}
}
作者:
尤圣回
时间:
2012-9-18 22:33
因为old在栈内存中本身存在 现在Object[] oldArr这个在堆内存中指向了这个栈内存的old 和这个原谅是同理for(int i=0;i<size;i++){ //oldArr 中的元素赋值给old
old=oldArr;
}
都是堆内存中指向了这个栈内存的old
作者:
黑马张涛
时间:
2012-9-18 23:16
你确定是一样的?
for(int i=0;i<size;i++){
old=oldArr;//old,oldArr都是引用类型,存储的都是地址值,可以相互赋值,但是你这样就是把oldArr的地址值赋值给了old,那old肯定也是指向oldArr指向的地址了,但old.length肯定是和oldArr.length一样,扩容就没用了吧!
}
作者:
罗雪梅
时间:
2012-9-20 07:52
黑马张涛 发表于 2012-9-18 23:16
你确定是一样的?
for(int i=0;i
式过了,是一样的效果
作者:
程振
时间:
2012-9-20 14:00
你那种可行的说法应该不对,你看看你的代码,上面的定义中private int size=0;
它只在add方法调用时增加1,所以可以添加数据。
你的Object [] old;应该还是原先的内容,大小没变。
不知道我说的对不对,你看下你写的
作者:
罗雪梅
时间:
2012-9-20 15:45
我运行结果没问题的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2