求助求助

在路上123_ 2018-12-27 05:18:58
小弟在学习final关键字的时候看到String内部有一个用final修饰的字符数组,如下:
private final char value[];

我们知道用final修饰数组的时候,只是说数组不能够指向别的地方,但是数组内的元素是可以修改的。
小弟的问题是如果有下面的代码
String a = new String("abc");
a = "abcd";
为什么编译器不会报错呢?
...全文
54 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上123_ 2018-12-27
  • 打赏
  • 举报
回复
引用 5 楼 DK_ing的回复:
[quote=引用 3 楼 zailushang123_的回复:][quote=引用 1 楼 DK_ing的回复:]new了两个字符串。相当于改变了a的引用。对于其中一个字符串来说,它还是它,不曾改变
是说a只是一个引用,和类里面的value没有关系吗?那用final修饰value是避免了什么情况发生呢?[/quote] 为了避免内存中出现大量重复数据[/quote] 小弟我的理解是这句话保证每一个String不能被重复赋值,然后后面方法普遍存在的保护性拷贝保证了不能通过修改相同的引用来修改value的值。这样是正确的吗?
DK_ing 2018-12-27
  • 打赏
  • 举报
回复
引用 3 楼 zailushang123_的回复:
[quote=引用 1 楼 DK_ing的回复:]new了两个字符串。相当于改变了a的引用。对于其中一个字符串来说,它还是它,不曾改变
是说a只是一个引用,和类里面的value没有关系吗?那用final修饰value是避免了什么情况发生呢?[/quote] 为了避免内存中出现大量重复数据
在路上123_ 2018-12-27
  • 打赏
  • 举报
回复
引用 2 楼 LCL_data的回复:
String a = new String("abc"); 现在a指向 abc
a = "abcd"; 现在a指向了 abcd,a的地址没变,指向的地方变了
那我们用final修饰value的作用是什么呢?
在路上123_ 2018-12-27
  • 打赏
  • 举报
回复
引用 1 楼 DK_ing的回复:
new了两个字符串。相当于改变了a的引用。对于其中一个字符串来说,它还是它,不曾改变
是说a只是一个引用,和类里面的value没有关系吗?那用final修饰value是避免了什么情况发生呢?
十八道胡同 2018-12-27
  • 打赏
  • 举报
回复
String a = new String("abc"); 现在a指向 abc
a = "abcd"; 现在a指向了 abcd,a的地址没变,指向的地方变了
DK_ing 2018-12-27
  • 打赏
  • 举报
回复
new了两个字符串。相当于改变了a的引用。对于其中一个字符串来说,它还是它,不曾改变

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧