日期:2014-05-20  浏览次数:20807 次

java和简单的问题。。。。。。。急!!!在先等!!!!
int a[]={100,200,300};
  int b[]={10,11,12,13,14,15,16};
  b=a;
  System.out.println("数组a:"+a[0]+","+a[1]+","+a[2]);
  b[0]=123456;
  System.out.println("数组a:"+a[0]+","+a[1]+","+a[2]);
  System.out.println("数组b:"+b[0]+","+b[1]+","+b[2]);
  System.out.println("数组b的长度:"+b.length);

  int d=10;
  int e=20;
  e=d;
  e=30;
  System.out.println(d);
  System.out.println(e);

数组a:100,200,300
数组a:123456,200,300
数组b:123456,200,300
数组b的长度:3
d=10
e=30

为什么把b[0]=123456;a[0]的值也发生了变化?
数组有这种情况,非数组却没有变化呢?



------解决方案--------------------
1. b=a,使得b和a指向的是同一个数组引用.
2. 要想改b时不改a,建议使用b=a.clone()
------解决方案--------------------
探讨
那楼上的意识 e=d 时 e=30; 为什么d的制值没有变化?

------解决方案--------------------
Integer是int的包装类喵~~`
基本类型和基本类型的包装类是有特殊处理的,其实包装类这么做,也是为了兼容基本类型的语法.
不然哪儿还叫"包装"啊喵~~`
------解决方案--------------------
int a[]={100,200,300}; 
int b[]={10,11,12,13,14,15,16}; 
b=a; //让B对象也指向A对象所指向的数组
System.out.println("数组a:"+a[0]+","+a[1]+","+a[2]); 
b[0]=123456; 
System.out.println("数组a:"+a[0]+","+a[1]+","+a[2]); 
System.out.println("数组b:"+b[0]+","+b[1]+","+b[2]); 
System.out.println("数组b的长度:"+b.length); 

a----->a数组
b----->B数组
b=a;
即:
a----->a数组
b----->a数组
b[0]=123456;
所以A对象所指向的数组也会变的

int是分配在栈空间里
内存布局
 int d=10; -------d:10
int e=20; -----e:20
e=d; ------d:10
e=30; ----e:30
他们是互不干预的