匿名吐槽 面试最后一题,为什么 String 不可变

匿名 · 2018年04月20日 · 最后由 匿名 回复于 2018年04月23日 · 2048 次阅读

前面问 DNS,CDN,python 等问题,最后问了个 java 问题。我答的是 String 源码实现是 char 类型的数组,我说数组创建后,不能改变😂

共收到 7 条回复 时间 点赞

String 底层是一个 char 类型的数组,这个数组 被 private + final 修饰,并且在 String 类内部没有对数据元素进行过修改,所以 String 是不可变的。

DNS、CDN、python 的问题也分享一下呗楼主

什么公司啊,问这个问题

string 并不是不可变的:正常情况下,string 确实是不可变的,正如 1 楼所说,但是可以使用反射来实现 string 的可变性
至于为什么要这样设计,那是为了安全

匿名 回复

哈哈,java 的反射让你无所不能

string 类没有提供可以修改内部信息的方法,为什么不提供?因为静态字符串池的存在,如果可以修改,会导致静态字符串池内出现重复字符串

举个例子一目了然:
StringBuider 是可变的,修改了 sb2,sb1 并没有修改,因为 StringBuider 可变,俩对象用的一个地址值,修改一个另一个也跟着改变了

StringBuilder sb1 = new StringBuilder("aaa");
StringBuilder sb2 = sb1;
sb2.append("bbb");
System.out.println("sb1: "+sb1);
System.out.println("sb2: "+sb2);

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册