蓝盟IT小贴士,来喽!
在Java语言中,Sun工程师对String对象进行了许多优化,以节省内存空间并提高系统中String对象的性能。
1.在Java 6和更早版本中,String对象是封装字符数组的对象。有四个主要变量:字符数组,偏移量,字符数和哈希。 String对象使用offset和count属性来定位char []数组并获取字符串。这样可以高效而快速地共享数组对象,同时可以节省内存空间,但这很可能导致内存丢失。
2.从Java7到Java8,Java对String类进行了一些更改。 String类中不再有两个offset和count变量。这样做的好处是String对象占用的内存少了一点,而String.substring方法不再共享char [],这解决了使用此方法可能导致的内存丢失问题。
3.从Java 9开始,工程师将char []字段更改为byte []字段,并维护了新的属性编码器,它是编码格式的标识符。
在了解了String对象的实现之后,您是否发现在实现代码中,String类用final关键字修饰,而可变字符数组也用final修饰。
我们知道一个类被终止以指示该类不可继承,而char []以final + private结束,这表明不能更改String对象。用Java实现的此功能称为String对象的不变性,也就是说,一旦成功创建String对象,就无法更改它。