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

737 阅读1分钟

不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—blog.csdn.net/cjm24848365…

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是不可变的。

积累点滴,做好自己~