[每日一题]对比Java中的String、StringBuffer、StringBuilder

今天来个简单的题目,轻松一下:)

相信很多人对这个问题都不陌生,只要是个Java程序员,肯定就用过这几个类:
1、String是个不可变对象,这就意味着每次字符串拼接都是创建了新的实例
2、StringBuilder和StringBuffer都是专门用来做字符串拼接的
3、StringBuffer是线程安全的,StringBuilder是线程不安全的
4、线程安全是要付出代价的,所以StringBuffer比StringBuilder要慢一点点

OK,上面四条是不是倒背如流了?那问个具体问题:

1、以下虚构出来的三种写法哪个速度最快?哪个最差?

String str = new StringBuilder("I").append("love").append("Java").append("Python").append(...).append("Golang").toString();
String str = new StringBuilder("I").append("love").append("Java").append("Python").append(...).append("Golang").toString();
String str = new StringBuffer("I").append("love").append("Java").append("Python").append(...).append("Golang").toString();

解答:因为都是字符串字面量,第一种写法速度最快,在JVM看来就相当于是 String str = “IloveJavaPython…Golang” ,当然了,这么写纯属蛋疼,为了考察知识点而已,诸君一笑置之:)第三种用了StringBuffer的最慢,呵呵

如果是这么写呢?

String a = "I";
String b = "love";
String c = "Java";
String d = "Python";
...
String e = "Golang";
String str = a + b + c + d + ... + e;

变量之间用+连接,不再是字符串字面量,这种写法将会是最慢滴

2、再来看一个,问:下面这个方法可以用于多线程环境么?

public static String build(String... args) {
    StringBuilder buf = new StringBuilder();
    for (int i = 0; i < args.length; i++) {
        buf.append(args[i]);
    }
    return buf.toString();
}

解答:此处的StringBuilder是个局部变量,虽说StringBuilder本身是线程不安全的,但是用在此处没有任何问题哈:)

这是第八个面试题了,一个人每天更新太难坚持了,求投稿啊求投稿:)

本文来自微信公众号:it_mianshiti

时间: 2024-11-05 17:29:10

[每日一题]对比Java中的String、StringBuffer、StringBuilder的相关文章

重温java中的String,StringBuffer,StringBuilder类

任何一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的. String 类已在上一篇随笔 小瓜牛

在JAVA中,String,Stringbuffer,StringBuilder 的区别

首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String的时候,需要先进行同步,否则会出现不同线程获得的值不同的情况,即线程不安全 StringBuffer 是线程安全的,在不同线程中共享的时候会自动同步,不需要手动同步. 效率方面: String在每次更改的时候均是重新建立一个变量,再将更改后的值赋予其中,多次更改之后会触发JVM的GC机制,占用资源

Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正. 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String

[转载]Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正. 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String

分享知识-快乐自己:Java 中 的String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1):首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String:最慢的原因: String:为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的. 以下面一段代码为例: String str="abc";

关于Java基础知识 String StringBuffer StringBuilder三者的区别

Java基础中String StringBuffer StringBuilder 以下介绍 相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder 不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用 StringBuffer:线程安全(

Java学习笔记--String StringBuffer StringBuilder

String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String str0 = "最正常的创建方法"; System.out.println(str0); char[] c1 = new char[3]; c1[0] = 'c'; c1[1]

6-探秘Java中的String、StringBuilder以及StringBuffer

相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于String.StringBuffer的面试题(辟谣网上流传的一些曲解String类

【转】探秘Java中的String、StringBuilder以及StringBuffer

探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于