java小程序中数组赋值问题

public class example2
{
public static void main(String args[])
{
int a[]={1,2,3,4};
int b[];
System.out.println(a[3]);
b=a;
b[3]=100;
System.out.println(a[3]);
System.out.println(b[3]);

}

}
新手。。。输出结果为4.100.100。想问一下为何a数组也变了。


Smart猫小萌
浏览 714回答 7
7回答

收到一只叮咚

数组是引用类型变量,int a[] ={1,2,3,4};中值{1,2,3,4}是存放在堆内存中,而变量是在栈内存中,当b=a赋值是使b指向到堆内存中的值,所以在给b数组修改变量时是将堆内存中的值改变了,同时a数组也是指向同一个堆内存的地址上的值,所以a输出出来也是改变过得。

倚天杖

数组的复制方法现在至少有四个思路:  1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多  2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。  3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。  4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制

至尊宝的传说

因为b=a是让b指向了a,而不是复制了一个数组

手掌心

int a[]={1,2,3,4};//只是让a指向了数组{1,2,3,4};b=a//让b也指向了数组{1,2,3,4};a和b的值都只是数组{1,2,3,4}的引用。所以因为指向了同一个数组对象,数组变了,a,b的值也都跟着变了。a,b中实际存储的都只是数组对象{1,2,3,4}在内存中的地址。数组的值变了,但a,b中的数组对象的地址是没变的。

青春有我

建议去看下java运行时堆和栈及常量区这些基础的概念,应该能对这个问题有更清晰的了解

海绵宝宝撒

引用数据类型 你这里的b[]的内存地址跟a[]一样的 所以你改变b[] a[]也就变了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java