A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭润生 中级黑马   /  2012-9-19 20:09  /  2021 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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]);
}
}

6 个回复

倒序浏览
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:15
a=b;//为什么这样也可以啊?下面的结果打印是b的,数组怎么这么像String,和String有什么区别吗?

其实这 ...

那就是和String类似了,都是地址值的赋值
回复 使用道具 举报
彭润生 发表于 2012-9-19 20:24
那就是和String类似了,都是地址值的赋值

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

希望对楼主有帮助

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

Demo.jpg
回复 使用道具 举报
其实我感觉也是挺像的,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]);
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马