1、Java String 类

  String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。String对象一旦被创建就是固定不变的了,对String对象的任何操作都不会影响到原对象,相关的任何改变操作都会生成新的对象。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

字符串直接赋值的方式创建对象:直接赋值方式创建对象是在方法区的常量池,只开辟一块堆内存空间,并且会自动入池,不会产生垃圾。

通过构造方法创建的字符串对象:通过构造方法创建字符串对象是在堆内存,会开辟两块堆内存空间,其中一块堆内存会变成垃圾被系统回收,而且不能够自动入池,需要通过public  String intern();方法进行手工入池。

在开发的过程中不会采用构造方法进行字符串的实例化。

字符串常量池:

字符串的创建和其他对象的创建一样需要消耗高昂的时间和空间,但因为字符串我们经常使用,所以为了提高虚拟机的性能和减少内存开销,在实例化的时候进行了一些优化:使用字符串常量池。具体过程如下:每当我们通过直接赋值的方式创建字符串常量的时候,虚拟机会首先检查字符串常量池,如果字符串常量池有的话,就直接返回常量池中的引用,但是如果没有的话,就会实例化该字符串并且将它放到常量池(在方法区)中。

2、Java StringBuffer 和 StringBuilder 类

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

事实上,StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

注意:

  • 对于直接相加的字符串效率很高,因为在编译期就确定了它的值,也就是说形如"I"+"love"+"java"; 的字符串直接相加,在编译期间就会被优化成了"Ilovejava";对于间接相加,形如s1+s2+s3; 效率要比直接相加低,因为在编译期不会对引用变量进行优化。
  • String、StringBuilder、StringBuffer三者的执行效率:StringBuilder > StringBuffer > String

3、面试题总结:

输出的结果为false,这里虽然将变量b用final修饰了,但是由于其赋值是通过方法调用返回的,那么他的值只能在运行期间确定,所以a和c指向的不是同一个对象。

6、String str = new String("abc")创建了多少个对象?

  这个问题需要分不同的情况进行说明:是这段代码执行过程中创建了几个对象还是涉及到几个对象?

这段代码在运行期间确实只创建了一个对象,即在堆上创建了"abc"对象。而为什么大家都在说是2个对象呢,这里面要澄清一个概念  该段代码执行过程和类的加载过程是有区别的。在类加载的过程中,确实在运行时常量池中创建了一个"abc"对象,而在代码执行过程中确实只创建了一个String对象。

因此,这个问题如果换成 String str = new String("abc")涉及到几个String对象?合理的解释是2个。

Java基础知识总结--String、StringBuffer、StringBuilder的更多相关文章

  1. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  2. [改善Java代码]正确使用String,StringBuffer,StringBuilder

    CharSequence接口有三个实现类与字符串有关:String,StringBuffer,StringBuffer.虽然它们都与字符串有关,但是其处理机制是不同的. String类是不可改变的量, ...

  3. JAVA基础--常用类 String,StringBuffer, 基础数据类型包装类, Math类, Enum类

    字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello&quo ...

  4. C#基础知识之String,Stringbuilder和Stringbuffer

    String可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了存储数值不可改变的字符串. StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义 ...

  5. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

  6. stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)

    1.StringBuffer类的概述 * A:StringBuffer类概述 * 通过JDK提供的API,查看StringBuffer类的说明 * 1.线程安全的可变字符序列. * 2.可将字符串缓冲 ...

  7. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  8. Java学习笔记--String StringBuffer StringBuilder

    String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...

  9. Java基础知识回顾之二 ----- 修饰符和String

    前言 在上一篇中,回顾了Java的基本数据类型 ,这篇就来回顾下Java中的一些修饰符以及String. 修饰符介绍 Java修饰符主要分为两类: 访问修饰符 非访问修饰符 其中访问修饰符主要包括 p ...

随机推荐

  1. java 解析域名得到host

    // 形如https://www.baidu.com 或 www.baidu.com, 判断这两种情况,并解析前者去掉http头,传入domain host // 方案1:正则表达式 + URI解析方 ...

  2. 修改Elasticsearch的settings

    解决:Limit of total fields [1000] in index [nginx-access-log] has been exceeded" 的问题 PUT http://1 ...

  3. 通过CSS自动截取字符串长度

      Table Tr TD的自动换行 <style type="text/css"> table { width: 30em; table-layout: fixed; ...

  4. Typescript知识梳理

    概述 TypeScript简称TS,具有类型系统,且是JavaScript的超集. 它可以编译成普通的JavaScript代码.TypeScript支持任意浏览器,任意环境,任意系统并且是开源的.通过 ...

  5. centos 6.9安装python 3.6

    .下载源码包在官网按照需要下载到本地 wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz .解压源码包 tar -xvf Pyt ...

  6. 修改ini文件的批处理

    用VBS更简单: vbs代码: On Error Resume Next Dim Fso,TxtFl,Str Set Fso = CreateObject("Scripting.FileSy ...

  7. Codeforces 806 D. Perishable Roads Dijkstra

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF806D.html 题目传送门 - CF806D 题意 给定一个 n 个点的无向完全图,每一条边有一定的边权. ...

  8. BZOJ1799 self 同类分布 数位dp

    BZOJ1799self 同类分布 去博客园看该题解 题意 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. [约束条件]1 ≤ a ≤ b ≤ 10^18 题解 1.所有的位数之和&l ...

  9. httpmodule MVCapplication

    转自:http://www.cnblogs.com/fish-li/archive/2011/09/05/2168073.html http://www.cnblogs.com/yplong/p/55 ...

  10. POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)

    <题目链接> 题目大意: 给出一个初始值全为0的矩阵,对其进行两个操作. 1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0. 2.查询某个坐标的点的值. ...