美文网首页
java基础阅读之String整理

java基础阅读之String整理

作者: 先生zeng | 来源:发表于2019-12-14 15:32 被阅读0次

    先说说我对String类得印象吧,这是一个字符串类,设计成了不可变对象,也就是类以及类内部属性都设置成final类或者私有的域,并且没有对外提供更改内部属性的方法以及拓展。他主要就是用来存储字符串,每次我们拼接一个字符串或者set,内部都会生成一个新的对象。

    可以看一下他的源码: 每次我们对字符串对象去设置值或者拼接时,实际上,是value指向了新的字符串的引用地址。

    ,值是存储在value数组里面的。

    那么我们可以先来看一下,String是如何被设计成不可变对象的呢?

    不可变对象的满足条件我上面已经列举出来了,看一下上面的源码,就可以知道,他的属性都被设置成final以及private,并且每次对String去拼接时都是使value指向新的引用地址。当我们对String字符串去replace、修改等操作时,其实都是在堆内存中创建了一个新的对象。然后我们的value指向不同的对象罢了。

    在深入的了解下,为什么String要被设计成不可变对象呢?

    我发现String这个对象在java中使用是很多的,甚至说,基本上,不涉及性能考虑以及多线程情况,基本都是使用这个类,这也涉及到了数据库的大量的增删改查,每次增删改查都会检查这个String对象的HashCode,设计成不可变对象,这个code值可以保证不可变,从而保证唯一。

    在jvm中,他是存放在常量池的,如果该对象运行改变,那么会导致很多不可细数的逻辑错误,因为我们都是复用该值得。

    使用上得问题吧,一般就是如果涉及到大量得拼接修改得话,建议不要使用String去存储字符串,可以使用StringBuffer,并且这个类还能保证线程安全,但是执行速度有待提高,如果是在单线程情况下,又有大量得拼接等操作,可以使用StringBuilder,这个得使用场景和StringBuffer是一样的。

    如果要该变String类的值呢?

    反射,我们可以通过反射去得到该实例,设置他的可改变属性威true,去修改value的值。

    相关文章

      网友评论

          本文标题:java基础阅读之String整理

          本文链接:https://www.haomeiwen.com/subject/jzdflctx.html