Discuss / Java / 个人领悟心得

个人领悟心得

Topic source

Room

#1 Created at ... [Delete] [Delete and Lock User]

我这样子理解的,各位大佬看看对不对:

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]所引用的内容可以根据继续编程变更;

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

当你的解释绕来绕去太复杂的时候,一般来说,你的解释是不对的。

浅复制和字符串不可变

□▼□

#4 Created at ... [Delete] [Delete and Lock User]

一、 错了,改变变量是改变了你所选变量的值,和你已经赋值给其他变量的值没关系。

二、楼上说String不可变是对的,但你现在没有修改String,你这个是String[] 是数组。

三、那么你需要确认一下你有没有写你的setName参数为(String[] fullName),以及你的setName()方法到底是要干什么,以及你name这个字段从最初设置时是什么类型。

四、当然,数组也不可变,这个不可变主要指的是咱们在设置时,应该经可能不要把经常会需要修改的量设为数组,因为数组和字符串的修改在Java内部是这样的:

1、新建一个同名同类型变量,设置正确长度

2、复制粘贴新值进去。

3、不再被使用的旧变量被丢进垃圾桶。

需要改变可以用ArrayList<这里写类型>,这是列表,但列表要建立时尽可能的贴近你需要的长度,否则超长时列表会自动扩张(但它不会自动删减,这会导致资源浪费。),不设置长度的列表长度默认为10,超出列表长度扩张规律为:原长度*1.5+1。

有一些多余的拓展知识,但总的来说你原本的理解是错误的,如果不在fullname[]数组修改前后多次调用setName()来修改name的值,则不能修改name的值。

希望可以帮到你,加油。

Faded

#5 Created at ... [Delete] [Delete and Lock User]

个人理解,希望能帮助到你

1.字符串对象是不可变的

2.bob 变量存的是字符串对象的地址

3.实例p中的字段name实际拿的是第一次传递的字符串地址

4.所以两次打印都是Bob


  • 1

Reply