java获取字符串长度的函数 JAVA中为什么String比StringBuffer的处理效率更高?
JAVA中为什么String比StringBuffer的处理效率更高?事实上,string和StringBuffer都用于Java中的字符串处理。当然,这两个类通常与StringBuilder进行比较
JAVA中为什么String比StringBuffer的处理效率更高?
事实上,string和StringBuffer都用于Java中的字符串处理。当然,这两个类通常与StringBuilder进行比较。
实际上,string、StringBuilder和StringBuffer都是基于字符数组实现的(jdk8是基于字节数组实现的)。但是这三者之间有什么相同点和不同点呢?
其中字符串类由final修改,因此其值是不可变的。当然,你也会有疑问,不能用“”进行字符串拼接操作,对吗?我打印了那个值,它确实改变了。在这方面,我需要解释一下,所谓的字符串拼接就是在生成新字符串之后,将新生成的字符串赋给原始变量。当然,还将有一个操作来确定字符串常量池中是否已经存在字符串值。但无论如何操作,最终的结果都是拼接后用新字符串替换旧字符串,或者重新赋值字符串变量。
StringBuffer和StringBuilder的值是可变的。如果只是在日常生活中使用,它们之间没有太大区别。但是,在多线程环境中使用StringBuffer效率较低。因为StringBuffer的方法是由synchronized关键字修改的,也就是说,当StringBuffer被多个线程共享时,会出现锁争用和等待问题,导致时间消耗增加。StringBuilder没有限制,但它容易出现线程安全问题。
因此,行业使用习惯是在单线程中使用StringBuilder,在多线程中使用StringBuffer。