黑马程序员技术交流社区

标题: 数组 [打印本页]

作者: 彭润生    时间: 2012-9-19 20:09
标题: 数组
public class Demo{
public static void main(String[] args) {
int[] a= new int[6];
for(int x = 0 ;x<a.length;x++){
  a[x] = x^2;
}
  int[] b = new int[4] ;
  for(int x = 0;x<b.length;x++){
   b[x] = x;
  }
   a=b;//为什么这样也可以啊?下面的结果打印是b的,数组怎么这么像String,和String有什么区别吗?
  System.out.println(a.length);//长度为4
for(int i=0;i<a.length;i++) {
  System.out.println(a[i]);
}
}
作者: 广驰    时间: 2012-9-19 20:15
a=b;//为什么这样也可以啊?下面的结果打印是b的,数组怎么这么像String,和String有什么区别吗?

其实这里的a=b是赋值,这就是java中引用的知识点,其实b并不是数组int[4]的实体,而是它的实体对象的地址值,
这里的a=b就是把b的值赋给了a,也就是d中存放的int[4]的数组的地址给了a,所以a也指向了int[4]
作者: 彭润生    时间: 2012-9-19 20:24
应广驰 发表于 2012-9-19 20:15
a=b;//为什么这样也可以啊?下面的结果打印是b的,数组怎么这么像String,和String有什么区别吗?

其实这 ...

那就是和String类似了,都是地址值的赋值
作者: 广驰    时间: 2012-9-19 20:29
彭润生 发表于 2012-9-19 20:24
那就是和String类似了,都是地址值的赋值

其实在java中基本上都是地址的赋值,变量其实都不是实体对象,而是对象的引用
作者: 赵永康    时间: 2012-9-19 20:49
在内存中存在栈内存和对内存(当然还有方法区,这里用不上就不说啦),a,b都是存在于内存中的栈内存中,他们的数组存在于堆内存中,new 数组的时候,是将a 和b的指向堆内存中的对象,并不是对象存在于栈内存中,你这里的a=b,是将b的引用指向a,这时候,a也指向了b的数组,所以你打印出来的就是a就是原来b的数组长度。  注意:在内存中 存在的是对象的引用,并不是实体对象。
作者: 张忠豹    时间: 2012-9-19 22:55
本帖最后由 张忠豹 于 2012-9-19 22:58 编辑

希望对楼主有帮助

Demo.jpg (61.64 KB, 下载次数: 23)

Demo.jpg

作者: 史小兵    时间: 2012-9-19 23:06
其实我感觉也是挺像的,String类型可以通过,其方法tocharArray()方法将其变成字符数组也可以getBytes()来变成字节数组
public class Demo{
public static void main(String[] args) {
int[] a= new int[6];
for(int x = 0 ;x<a.length;x++){
  a[x] = x^2;
}
  int[] b = new int[4] ;
  for(int x = 0;x<b.length;x++){
   b[x] = x;
  }
   a=b;//为什么这样也可以啊?下面的结果打印是b的,数组怎么这么像String,和String有什么区别吗?
在你创建数组对象时,只是将一个数组的地址赋值给了b因此在此处就相当于是赋值操作了,将b中的地址给a让其也指向该数组的地址!所以下边输出4
  System.out.println(a.length);//长度为4
for(int i=0;i<a.length;i++) {
  System.out.println(a[i]);
}
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2