Android面试专题系列(二):为什么说 String是不可变的?

不诗意的女程序媛不是好厨师~
转载请注明出处,From李诗雨—https://blog.csdn.net/cjm2484836553/article/details/105122807

《Android面试专题系列二》:为什么说 String是不可变的?)

1.从源码角度来看

从源码的角度,我们可以发现一些 String是不可变的 线索:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.从代码的运行结果来看

请看如下代码:

String str = new String("abc");
System.out.println(str.hashCode());
str += "a";
System.out.println(str.hashCode());
str += "b";
System.out.println(str.hashCode());
String str2="abcab";
System.out.println(str2.hashCode()+" "+str.hashCode());

我们运用反证法来证明:

  • ①假如String是可变的,那str一开始是“abc”,后来增加了一个字符变成了“abca”,再后来又变成了“abcab”.

    如果String是可变的,那str对象还是之前的str,str只是改变了内容,它应该还是之前的它,那它的hashcode值应该是不变的。

  • ②假如String是可变的,由于str不是一开始就是“abcab”的,那最后的str 和 str2 应该不是同一个对象,hashcode值也不应该相同才是。

但是!!!最终代码运行结果却和我们假设的恰恰相反!!!

在这里插入图片描述
假设不成立!

所以说,String是不可变的。

积累点滴,做好自己~

发布了104 篇原创文章 · 获赞 165 · 访问量 30万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览