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.   

    那楼上的意识 e=d 时   e=30; 为什么d的制值没有变化?
      

  2.   

    1. b=a,使得b和a指向的是同一个数组引用.
    2. 要想改b时不改a,建议使用b=a.clone()
      

  3.   

    数组a:100,200,300
    数组a:100,200,300
    数组b:123456,11,12
    是我错了吗?
      

  4.   

    对象 和 基本类型 是不一样的.
    Java里基本类型只有8种,它们以及相应的包装类在Java里有特殊处理.
    楼主拿其他的对象做实验吧.
      

  5.   

    Java数组是对象,b=a,就等于b,a引用同一个对象了,于是便有了后面的结果
      

  6.   

     Integer d=10; 
      Integer e=20; 
    这种情况也是上面的结果。
      

  7.   

    Integer d=Integer.valueof(10); 
      Integer e=Integer.valueof(20); 
      

  8.   

    Integer是int的包装类喵~~`
    基本类型和基本类型的包装类是有特殊处理的,其实包装类这么做,也是为了兼容基本类型的语法.
    不然哪儿还叫"包装"啊喵~~`
      

  9.   

    同意5楼
    执行 b=a 之后  ,a 和 b 就指向了同一块内存
      

  10.   

    a和b是引用
    所以执行b=a;后a,b引用了同一个实例,所以改变b的值和改变a的值都会改变同一个被引用实例.
    而d和e是值
    执行e=d;后只是d的值与e的值相等,而不是保存在同一内存,所以改e后,d不会跟着改变!
      

  11.   

    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
    他们是互不干预的
      

  12.   

    不好意思,下面写错了,应该是
    int是分配在栈空间里 
    内存布局 
    int d=10;    -------d:10 
      int e=20; -----e:20 
      e=d;  ------e:10 
      e=30;    ----e:30 
    他们是互不干预的 
      

  13.   

    1. b=a,使得b和a指向的是同一个数组引用. 
    2. 要想改b时不改a,建议使用b=a.clone()这个正解
      

  14.   

     b=a; 
    此时b是指向a的引用~~
    也就是a,b都引用同一地址,那就是a的地址·
      

  15.   

    java 中 分值类型和引用类型
    a和b是数组是引用类型 那么他们就相当于标签。而数组中的实际值相当于盒子里的东西。
    当 a= b 时  就是把a的标签贴到b的盒子上去,b[0]=123456就是把b的盒子里的东西换了。
    然后a[0]取到就是b的盒子里的东西
    当然 使用内存堆栈来解释更科学一点。
      

  16.   

    Integer d=Integer.valueof(10); 
      Integer e=Integer.valueof(20); 
    d=e
    e=Integer.valueof(30); 
    输出后:
    d=10
    e=30楼下的能给详细的解释一下 这个与数组的存放机制有什么区别
    以及java是如何处理integer这种引用类型处理 “输出后:d=10 e=30“内存存放和指针指向的地址?
      

  17.   

    引用 18 楼 cangyue87 的回复:
    基本类型不存在,它们的值存放在栈里的. 
    基本类型的包装类依然有引用,会在堆里占用内存空间喵~`` 
     
    Integer d=Integer.valueof(10); 
      Integer e=Integer.valueof(20); 
    d=e 
    e=Integer.valueof(30); 
    输出后: 
    d=10 
    e=30 楼下的能给详细的解释一下 这个与数组的存放机制有什么区别 
    以及java是如何处理integer这种引用类型处理 “输出后:d=10 e=30“内存存放和指针指向的地址?
      

  18.   

    引用 18 楼 cangyue87 的回复: 
    基本类型不存在,它们的值存放在栈里的. 
    基本类型的包装类依然有引用,会在堆里占用内存空间喵~`` Integer d=Integer.valueof(10); 
      Integer e=Integer.valueof(20); 
    d=e 
    e=Integer.valueof(30); 
    输出后: 
    d=10 
    e=30 楼下的能给详细的解释一下 这个与数组的存放机制有什么区别 
    以及java是如何处理integer这种引用类型处理 “输出后:d=10 e=30“内存存放和指针指向的地址?
      

  19.   

    JAVA中有3种引用类型,即类,接口和数组,它们不同于基本数据类型.
    它们所定义的变量,保存的其实是其对象的首地址.所以赋值语句b=a,相当于让变量b和a指向了同一个数组,即a所指向的数组.
    所以结果会是这样,不知道这样说LZ是否能明白.