JAVA 给数组赋值

定义一个未知长度的数组int[]a或者String[]a定义令一个数组int[]b={1,2,3,4}或者String[]b={"aa","bb","cc","dd"};... 定义一个未知长度的数组int[] a或者 String[] a
定义令一个数组int[] b = {1,2,3,4} 或者String[] b={"aa","bb","cc","dd"};
然后b = a;
可行吗?
展开
 我来答
雪飞潇潇
推荐于2017-12-15 · TA获得超过6274个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:864万
展开全部
int[] b;
int[] a ={1,2,3,4};
b=a;

答:可以这样对数组进行赋值。

      但是这种方式对数组进行赋值,  实际上是一种浅层复制.

       也就是说,b实际上就是a,它们的内存地址值都是一样的, 当a发生改变,那么b也会跟着改变 。

       为了真正意义上实现赋值,那么我们应该对数组进行深层复制。

        深层复制后,无论a怎么改变,都不会影响到b。

具体代码如下

package core.com;
import java.util.Arrays;
public class DemoCopy {
 public static void main(String[] args) {
  //---------浅层复制--------
  int[] a;
  int[] b = {1,2,3,4};
  a=b;//浅层复制. 当b改变的时候,a会跟着改变
  System.out.println(Arrays.toString(a));//输出数组a,[1,2,3,4]
  b[0] = 5;//改变数组b , 数组a也会跟着改变
  System.out.println(Arrays.toString(a));//输出数组a,[5,2,3,4]
  System.out.println(a==b);//输出true  a就是b
  //-----------分割线--------
  //深层复制方法一:
  String[] c ;
  String[] d = {"a","b","c"};
  c = new String[d.length]; // 需要初始化数组长度
  for (int i = 0; i < d.length; i++) {//循环复制,
   c[i] = d[i];
  }
  d[0]="y";//改变数组d, 不会影响c
  System.out.println(Arrays.toString(c));//
  System.out.println(c==d);
  
  //-------------分割线---------
  //深层复制方法二:
  int[] ary1;
  int[] ary2 = {8,8,8};
  ary1 = new int[ary2.length];
  System.arraycopy(ary2, 0, ary1, 0, ary2.length);//调用函数进行深层复制
  ary2[0]=6;//改变数组ary2,并不会影响ary1
  System.out.println(Arrays.toString(ary1));
  System.out.println(ary1==ary2);
 }
}

    控制台输出

[1, 2, 3, 4]
[5, 2, 3, 4]
true
[a, b, c]
false
[8, 8, 8]
false

  

匿名用户
2016-09-08
展开全部

int[] a在定义时,必须写成

int[] a = new int[]{};

或者

int[] a = new int[0];

或者

int[] a = null;

也就是必须给a进行初始化,才能进行b = a;。


另外你为什么要b=a呢,那样两个不是都没有值了吗?应该a=b吧,如果a=b的话,就不需要对a初始化了,直接int[] a;就行

追问
有时候一开始不知道数组长度,你的第二条int[] a=new int[0],定好长度就不好改了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fantasy316
2016-09-09 · TA获得超过1024个赞
知道小有建树答主
回答量:616
采纳率:0%
帮助的人:358万
展开全部
还是用例子来说话吧:

比如
A a[];//声明一个数组引用,它指向的数组的元素必须是A型或者A的子类型。
a=new A[10];//创建一个A类型数组,并且让引用a指向这个数组。
A=new B[100];//创建一个B类型数组,并且让引用a指向这个数组,这个时候B必须是A的子类,否则编译不通过。
从上面看到,长度是在数组被创建时才指定的。数据引用本身只知道自己指向的是什么类型的数组。

实际上,java的数组和对象有着许多相似的地方,完全可以把数组当作对象来看。长度length不过是数组的一个属性,不同的数组对象此属性可相同也可以不同。
对象的引用之间,只要类型相同,就可以相互赋值,数组也是这样的。

2楼的真是肤浅,如果数组没用的话,java还保留它干嘛。在读取文件时还不是要经常用到数组来缓冲吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
啊郎远去
2016-09-08 · TA获得超过109个赞
知道小有建树答主
回答量:136
采纳率:50%
帮助的人:90.3万
展开全部
可以 a的地址赋给b ;当然只是类型相同的才行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-09-08
展开全部
当然不行,类型不同。。。。。。。。。。。。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式