黄大仙论坛www.wz86358.com

Object[] a = listget(i); 对a的操作会影响list中的i的值吗特码

发布日期:2019-09-26 01:20   来源:未知   阅读:

  我记得有种情况下list存的是地址,然后取出来的做了操作会影响list中的数据。因为都是指向同一个地址,麻烦解释下这个,如果说清了我给50分

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  这个问题要分具体的情况的,我下面列举了三种情况,基本上就都包括了,剩下都可以通过这三种情况类似,先看一下我写了一段测试结果用的代码,先看结果,之后我再解释原因

  通过上面的例子我们就会发现,我们在修改Student实例中的年龄是可以修改的,但是在修改基本类型(int,long,short,byte,char,float,double,boolean)和String的时候是不变的。这个是直观的感受,真是是后面这一半是正确的。

  我写Student这个类的目的就是为了来描述我们自己定义的类会不会变,通过上面的例子我们发现变了,特码去哪儿。那么什么情况下不变呢,看下面这段代码:

  这段代码是没有修改list中的内容,其实到这里所有的情况就都包括了,很简单,在Java中传递引用,大家经常会把它理解为传递C语言中的指针,其实不然,你更应该把他理解为C语言中的传递值,这样就容易解释一些现象。

  以Student这段代码为例,list.get(0)拿到的是第一个Student实例的值,当我们直接修改这个实例的时候,是不会影响到list中的内容的,如

  这种是没有影响的,但是我们修改返回的这个实例中的属性的时候的,也就是修改Student中的年龄,姓名等的时候,这个时候是会改变list中的内容的(list中Student的引用的值没变,但是引用所指向堆中对象具体的属性改变了)。

  通过这种方式,我们就可以理解基本类型和String的时候为什么不会变了。笢弊笭迵笢弊坒蚐督昢磁釬婬汔撰蝠葆25怢瑰