个人领悟心得
Topic source一、 错了,改变变量是改变了你所选变量的值,和你已经赋值给其他变量的值没关系。
二、楼上说String不可变是对的,但你现在没有修改String,你这个是String[] 是数组。
三、那么你需要确认一下你有没有写你的setName参数为(String[] fullName),以及你的setName()方法到底是要干什么,以及你name这个字段从最初设置时是什么类型。
四、当然,数组也不可变,这个不可变主要指的是咱们在设置时,应该经可能不要把经常会需要修改的量设为数组,因为数组和字符串的修改在Java内部是这样的:
1、新建一个同名同类型变量,设置正确长度
2、复制粘贴新值进去。
3、不再被使用的旧变量被丢进垃圾桶。
需要改变可以用ArrayList<这里写类型>,这是列表,但列表要建立时尽可能的贴近你需要的长度,否则超长时列表会自动扩张(但它不会自动删减,这会导致资源浪费。),不设置长度的列表长度默认为10,超出列表长度扩张规律为:原长度*1.5+1。
有一些多余的拓展知识,但总的来说你原本的理解是错误的,如果不在fullname[]数组修改前后多次调用setName()来修改name的值,则不能修改name的值。
希望可以帮到你,加油。
- 1
Room
我这样子理解的,各位大佬看看对不对:
p.setName(fullname);---->这个命令是把数组fullname里的fullname[0],fullname[1],fullname[2]传给p的setName,所以当fullname[0]内容修改的时候,setName收到的信息会同时修改;
p.setName(bob);---->这个命令是把字符串bob里的Bob传给p的setName,所以当bob内容修改的时候,setName收到的信息不会修改;
小结:在同一个命令组成里,bob对位上面的数组fullname,Bob对位fullname[0],然而Bob本身就是具体内容,fullname[0]的内容是通过引用方法得出,所以前者传进去的是Bob这个字符串的位置,而fullname[0]所引用的内容可以根据继续编程变更;