Java string和stringbuilder区别

99 阅读2分钟

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

前言

string stringbuffer stringbuilder这三个标准的 面试题组合,java程序员倒背如流的三个区别,但是为了给一些刚入门的初级开发或者准备面试的你的复习,希望可以帮到你。

image.png

String

String 这个类大家都非常熟悉了,定义一个字符串类型的数据。常见于 String name = “a”,双引号必须带上,因为java 中的字符串是以双引号括起来的内容。这里注意一个点是关于虚拟机的内容,上面String name定义没有采用new字段,实际上是在方法区中的常量池添加了一个a字段,而如果你的写法是String name = new String(“a”),虽然最后结果是一样的,但如果你对比它们之间的引用地址会发现为false,因为new出来的a是被分配到堆中的,细节方面我们留到后面的JVM章节进行讲解,这里我们主要知道String的创建。

这里我们以String name = “a” 举例子 如果你后面使用使用name = “abc”这样重新指向一个新的常量内容,String是会把指针指向abc然后a就变成了垃圾没有人引用了,这样频繁的变更string字段会使得垃圾越来越多,这是不好的,所以一般变化很多不采用String来存储。还有一个原因就是String类点进去可以发现他其实是被final修饰了,这就意味着他是一个断子绝孙类。

StringBuilder

StringBuilder就是后面为了频繁操作字符串而产生的一个类,作为String的一个候补,也是拼接字符串常用的一个类。StringBuilder它的实现是StringBuilder sb = new StringBuilder("a");StringBuilder的好处在于它有一个方法,名为append,append(“aa”)就是把aa与a合并为一个字符串也就是 aaa,其底层实现是找到StringBuilder的数据内存存放地址,然后对内存中的数据进行更改,这样就不会像String一样产生内存碎片,但如果不频繁修改字符串的话其实效率是比String低的。

#总结

  1. String 的赋值是频繁开辟空间
  2. StringBuilder 在频繁拼接字符串上内存占比上比String会更好 下一章节我们讲一下StringBuffer与这两者的区别。。。