Java两个数组间赋值的问题
publicclassDeleteElements{publicstaticvoidmain(String[]args){int[]array={1,2,3,4,5};i...
public class DeleteElements {
public static void main(String[] args){
int[] array = {1, 2, 3, 4, 5};
int[] src = new int[3];
src = array;
for(int i = 0; i < src.length; i++){
System.out.println(src[i]);
}
}
}
如上,输出的是1,2,3,4,5.难道没有自动截断或者报错吗?! 展开
public static void main(String[] args){
int[] array = {1, 2, 3, 4, 5};
int[] src = new int[3];
src = array;
for(int i = 0; i < src.length; i++){
System.out.println(src[i]);
}
}
}
如上,输出的是1,2,3,4,5.难道没有自动截断或者报错吗?! 展开
展开全部
这个问题的关键在于传值还是传引用的问题。
在java中 “=” 传递的是对之后的对象的 引用,而不是它的值的另一个“版本”
比如Object a=b;
....// 一系列对a的操作,实际上是对b的操作。
这说明实际上是让a指向了b在内存中的地址。(如果是原生类型就是栈中的地址,如果是其他类型,就是堆中的地址)。
你也可以改下代码
增加2行
src[0] = 0;// 我修改改缺src的第搭掘一个元素
System.out.println(array[0]);// 实际上修改的是array的知歼核第一个元素。
这就是传引用。直接指向被引用对象的地址。
在java中 “=” 传递的是对之后的对象的 引用,而不是它的值的另一个“版本”
比如Object a=b;
....// 一系列对a的操作,实际上是对b的操作。
这说明实际上是让a指向了b在内存中的地址。(如果是原生类型就是栈中的地址,如果是其他类型,就是堆中的地址)。
你也可以改下代码
增加2行
src[0] = 0;// 我修改改缺src的第搭掘一个元素
System.out.println(array[0]);// 实际上修改的是array的知歼核第一个元素。
这就是传引用。直接指向被引用对象的地址。
展开全部
因为array,src实际上都是指针,你虽然int[] src = new int[3];
但是后面执行了兆山src = array;
src就指向了array的内存区域,所族兆中猜高以长度就变成了5,内容就是1,2,3,4,5.
但是后面执行了兆山src = array;
src就指向了array的内存区域,所族兆中猜高以长度就变成了5,内容就是1,2,3,4,5.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-08-03
展开全部
自认为那个src=array本身两个对唤老象都是地址,所以赋值做得是引用,将src指向到了array的地址上,所以之前腔中src的三个空间会被释伍链山放.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询