一、String类型

String类型是一个引用类型,但是该类被final修饰,属于最终类,不能派生子类。

字符串一旦初始化就不能再被更改,因为String类中存储内容的char[]数组是也被final修饰,所以其不可变,且因为该char数组私有而且String类没有提供修改数组里值的方,所以String是不可变的。

因为String不可变,所以可以共享。

二、String类的API

1.compareTo

按字典顺序比较两个字符串。该比较基于字串中各个字符的unicode值。

如果两个字符串 不同,要么他们再某个索引处开始具有不同的字符,要么它们的长度不同,或者两者皆有。如果是索引问题则比较索引处字符,this.charAt(k)-anotherString.charAt(k)。等于0代表相等,小于0表示该字符字典顺序上小于字符串参数,大于0表示该字符串字典顺序上大于字符串参数。

如果他们没有不同的索引位置,则较短字符串再字段顺序上位于较长字符串的前面。

2.toLowerCase

将此String中的所有字符都转换为小写。

3.toUpperCase

将此String中的所有字符都转换为大写

4.trim

返回字符串的副本,忽略前导空白和尾部空白。

5.toCharArray

将此字符串转换为一个新的字符数组

6.split

根据给定的正则表达式的匹配来拆分此字符串

7.substring

返回一个新的字符串,他是此字符串序列的的一个子序列

8.concat

将指定字符串连接到此字符串的结尾。

9.indexOf

返回指定字符在此字符串中出现的第一次索引

10.intern

String s1 = new String("aaa");
String s2 = s1.intern();

如果常量池中存在“aaa”的字符串的引用,那么就返回该引用

如果常量池中不存在“aaa”的字符串的引用,那么就将s1加入到常量池中,并返回s1.

三、字符串比较

1.比较两个通过直接赋值创建的字符串对象

直接赋值创建字符串对象的过程:首先在字符串常量池中查找是否存在相同字符串值的引用,如果有直接返回该引用,如果没有则创建一个对象然后将其加入字符串常量池中,然后返回其引用。

注意:String类重写了equals方法和hashCode方法,equals方法比较的是字符串的值是否相同。

2.直接赋值创建和new创建进行比较

new创建的过程:String s3 = new String("test");,个人理解,先解析“test”,重复1过程,然后再创建一个同等字符串值的字符串对象。

//        比较两个通过直接赋值创建的字符串对象
String s1 = "test";
String s2 = "test";
System.out.println(s1 == s2);//true
System.out.println(s1.equals(s2));//true // 一个通过直接赋值创建的字符串对象和一个用new创建的字符串对象之间的比较
String s3 = new String("test");
System.out.println(s1 == s3);//false
System.out.println(s3.equals(s1));//true // 两个用new创建的字符串对象之间的比较
String s4 = new String("test");
String s5 = new String("test");
System.out.println(s4 == s5);//false
System.out.println(s4.equals(s5));//true // 测试String的intern方法
String s6 = s5.intern();
System.out.println(s1 == s6);//true

四、StringBuilder、StringBuffer

StringBuilder是 线程安全的。StringBuffer是线程不安全的。一个可变的字符序列。

主要的API就是insert和append

append为追加内容,insert为插入内容。

五、String使用+拼接字符串的原理

String使用StringBuilder作为中间对象实现。

        String str1 = "nishizhuma";
String str2 = "geiniqidaiergeng";
String str3 = str1 + str2;
System.out.println(str3);

上方实现过程可以转化为下方。

        String str1 = "nishizhuma";
String str2 = "geiniqidaiergeng";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(str1);
stringBuilder.append(str2);
String str3 = stringBuilder.toString();

六、速度比较

比较String+号字符拼接字符串和StringBuilder使用append来拼接的速度

        String s1 = new String("begin");
long timeBegin = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
s1 += i;
}
long time = System.currentTimeMillis() - timeBegin;
System.out.println("string对象" + time); StringBuilder s2 = new StringBuilder("begin");
long timeBegin1 = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
s2.append(i);
}
long time1 = System.currentTimeMillis() - timeBegin1;
System.out.println("stringBuilder对象" + time1);

结果显示StringBuilder优于String。

故如果有大量的字符串拼接时推荐使用 StringBuilder来进行

七、拼接空对象

StringBuilder拼接空对象时会拼接一个null字符串。+拼接同理,因为+拼接使用StringBuilder的append实现的。

源码为

    public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}

4.String、StringBuffer、StringBuilder

4.String、StringBuffer、StringBuilder的更多相关文章

  1. Java中String、StringBuffer、StringBuilder区别与理解

    一.先比较String.StringBuffer.StringBuilder变量的HashCode值 使用System.out.println(obj.hashcode())输出的时对象的哈希码, 而 ...

  2. String、StringBuffer、StringBuilder的区别

    在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String.StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适 ...

  3. String、StringBuffer、StringBuilder的一些小经验……

    一说String.StringBuffer和StringBuilder,想必大家都很熟悉,这三者经常在我们的面试题中出现,我也是看到了关于这三个的经典面试题,才触动了我之前工作中的一些经历,故而根据我 ...

  4. java中String、StringBuffer、StringBuilder的区别

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. String、StringBuffer与StringBuilder之间区别[全屏看文]

    String.StringBuffer与StringBuilder之间区别[全屏看文]   最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...

  6. 浅析String、StringBuffer、StringBuilder的区别以及性能区别

    前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...

  7. [drp 2]String、StringBuffer和StringBuilder的区别

    导读:在实际运用了,我们会频繁的用到string.stringBuffer和stringBuilder这三个东西,那么,他们之间的区别是什么呢.本文主要是从拼写SQL语句的角度,来阐释他们之间的区别! ...

  8. 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

    [重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder   1.String String是Java中的一个final ...

  9. 深度学习String、StringBuffer、StringBuilder

    相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它 ...

  10. 提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder

    一.建议  CharSequence接口有三个实现类与字符串相关:String.StringBuffer.StringBuilder,虽然它们都与字符串相关,但是其处理机制不同. 根据不同的场景,建议 ...

随机推荐

  1. abc -- 牛客

    题目描述 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc=532.求满足条件的所有a.b.c的值. 输入描述: 题目没有任何输入. 输出描述: 请输出所有满足题目条 ...

  2. No!No!No! It's not fashion!

    还记得搞怪的hold住姐Miss Lin么,对于人们常规的行为,Miss Lin会挑起夸张的眉毛说:"Oh my God, it's not fashion!".如果程序员圈子里有 ...

  3. 从Dictionary源码看哈希表

    一.基本概念 哈希:哈希是一种查找算法,在关键字和元素的存储地址之间建立一个确定的对应关系,每个关键字对应唯一的存储地址,这些存储地址构成了有限.连续的存储地址. 哈希函数:在关键字和元素的存储地址之 ...

  4. Mysql的B+ Tree索引

    为什么要使用索引? 最简单的方式实现数据查询:全表扫描,即将整张表的数据全部或者分批次加载进内存,由于存储的最小单位是块或者页,它们是由多行数据组成,然后逐块逐块或者逐页逐页地查找,这样查找的速度非常 ...

  5. .Net MVC 框架基础知识

    一.什么是MVC? MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式. MVC全名是Model View Controlle ...

  6. CGI getenv 参数

    变量名 描述 CONTENT_TYPE 这个环境变量的值指示所传递来的信息的MIME类型.目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencod ...

  7. maven学习(1)下载和安装和初步使用(手动构建项目和自动构建项目)

    1:背景 关于项目的搭建,有些人使用开发工具搭建项目,然后将项目所依赖第三方jar 复制到类路径下面,上述搭建方式没有第三方类库的依赖关系,在导入一个jar包的时候,这个jar包还可能依赖其他jar包 ...

  8. 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)

    前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...

  9. Spring与后端模板引擎的故事

    更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 现在很多开发,都采用了前后端完全分离的模式,随着近几年前端工程化工具和MVC框架的完善,使得这种模式的维护成本逐渐降 ...

  10. Cat应用告警实战

    1. Cat应用告警实战 1.1. 前言 好像是中间件设计者的通病,文档写的都是面向有一定使用各种中间件经验的人,告警模块中每个参数其实都可以详细解释一下,要不然我们理解起来真的很吃力还容易采坑 1. ...