七叶笔记 » java编程 » Java详细分析String类与StringBuffer和StringBuilder的使用方法

Java详细分析String类与StringBuffer和StringBuilder的使用方法

String类基本概念 String类属于引用数据类型,不属于基本数据类型。在Java中只要是" "(双引号)中的,都是String对象。java中规定,双引号中的字符串是不可变的,也就是说"abc"自出生到死亡都不可能变成"abcd",也不能变成"ab"。在JDK中双引号括起来的字符串都是存储在方法区的字符串常量池当中的。(因为在实际开发中,字符串的使用频率十分高,为了执行效率,就把字符串放在了方法区中的字符串常量池当中)

String字符串的存储原理 通过 String s = “abc” 这种方式,会在方法区中的字符串常量池创建对象,s会保存该字符串在字符串常量池中的地址。通过 String s = new String(“abc”)的方式创建对象,首先会在字符串常量池中创建"abc"对象(如果字符串常量池中已经有了"abc"则不会再次创建),然后会在堆区创建String类对象,它会储存" abc "在方法区中的地址,s又会保存堆中String对象的地址。

看以下代码:

按照以上代码画出JVM内存简图如下:

知道了String类字符串的存储原理之后,就可以很容易知道以下代码的编译结果:

String类的常用构造方法

String类中常用方法

StringBuffer类

思考:

频繁使用字符串拼接会有什么影响?java中字符串是不可变的,每拼接一次都会产生一个新的字符串字符串是存在字符串常量池中的,频繁使用字符串拼接会占用大量的方法区空间

为了避免以上问题我们就可以使用到StringBuffer类

StringBuilder类

它的用法与StringBuffer十分相似,但是也有很大的区别:

StringBuffer中的方法都有synchronized关键字修饰,表示StringBuffer在多线程编译环境下是安全的StringBuilder中方法没有synchronized关键字修饰,表示StringBuilder在多线程编译环境下是不安全的

到此这篇关于Java详细分析String类与StringBuffer和StringBuilder的使用方法的文章就介绍到这了,更多相关Java String类用法内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章