String类
  (1)字符串:字符串是常量;它们的值在创建之后不能更改,存储在堆中
          如果字符串多次赋值,其实是每次重新赋值的时候程序都先在内存中寻找已开辟的空间是否存在该值;如果找不到,再开辟新的空间存储该对象
 (2)构造方法:
    A:String s = new String();  //空字符序列
    B:String s = new String(char[] chs);  //分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
    C:String s = new String(char[] chs,int index,int length);  //从index到length部分生成字符串
    D:String s = new String(String str);
    E:String s = "hello";

 String strA = "abc";
//等效于:
//char data[] = {'a', 'b', 'c'};
//String strA = new String(data);
String strB = "hello";
System.out.println(strA==strB); //false
strA = "hello";
System.out.println(strA==strB); //true
//说明strA和StrB指向的是同一个空间

(3)字符串的注意事项
   A:字符串一旦被赋值,就不能改变。
     注意:字符串的值不能改变,但是引用变量可以改变。
  B:字符串在作为实参传递给形参时,其实是把地址的值赋给了形参,在形参修改了字符串的内容后,原字符串的内容其实是不变的。

 public static void main(String[] args) {
String s = "hello";  //将"hello"的地址赋值给了s
change(s);
System.out.println(s); //hello
}
//注意这里是无返回值,因为这里的测试是不能修改s的地址值
public static void change(String s) {
s += "java";
}

C:字符串的==和equals

     //String s = new String("hello")和String s = "hello"的区别。
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2); //false 每一个变量new出来的地址都不相同
System.out.println(s1.equals(s2));//true String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3==s4); //false
System.out.println(s3.equals(s4)); //true String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6); //true
System.out.println(s5.equals(s6)); //true
/*
* String的equals的实现原理:
* 第一步:先判断这两个字符串的地址值是否相同(==实现)
* 相同:返回true
* 不同:
* 第二步:判断这两个字符串的长度是否相同
* 不同:返回false
* 相同:第三步:将字符串变为数组逐个进行比较
* 找到不同:立刻返回false
* 找到最后:返回true
*/

(4)成员方法
    A:判断功能
  boolean equals(Object obj) //判断字符串是否相同,考虑大小写
  boolean equalsIgnoreCase(String str)//判断字符串是否相同,不考虑大小写
  boolean contains(String str) //判断字符串是否包含str
  boolean startsWith(String str) //判断字符串是否以str开头
  boolean endsWith(String str) //判断字符串是否以str结尾
  boolean isEmpty() //判断字符串是否为空
  B:获取功能
    int length() //获取字符串的长度
    char charAt(int index) //获取第index位置的字符
      int indexOf(int ch) //获取字符串中第一次出现ch字符的索引
      int indexOf(String str) //获取字符串中第一次出现str字符串的索引位置
      int indexOf(int ch,int fromIndex) //从某个位置开始获取ch字符第一次出现的索引
      int indexOf(String str,int fromIndex)//从某个位置开始获取str字符串第一次出现的索引
     String substring(int start) //从某个位置开始截取字符串
     String substring(int start,int end) //从某个位置开始到某个位置结束截取字符串
 C:转换功能
    byte[] getBytes() //将字符串转换为byte数组
    char[] toCharArray() //将字符串转换为char数组
    static String copyValueOf(char[] chs)//将字符数组转换成字符串
    static String valueOf(char[] chs) //将字符数组转换成字符串
    static String valueOf(int i) //将一个int数转换成字符串
    String toLowerCase() //转小写
    String toUpperCase() //转大写
    String concat(String str) //拼接字符串

D:其他功能
    a:替换功能
  String replace(char oldChar,char newChar) //将newChar全部替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
  String replace(String oldString,String newString)

b:切割功能
  String[] split(String regex) //通过regex切割字符串,切割后会产生一个字符串数组
 c:去除两端空格功能
  String trim()
    d:字典顺序比较功能
  int compareTo(String str) //如果str比str1大的话,返回的正数
  字符串的比较原理:
      第一步:将两个字符串转变为char数组
      第二步:逐个比较char数组中的相同元素的大小
    相同:继续比较其他元素
    不同:返回 第一个数组比较元素的字符减去第二个数组中的同位置元素
  注意:若较短的数组长度的最后一位已经比较完了,则返回第一个数组长度减去第二个数组的长度
  int compareToIgnoreCase(String str) //忽略大小写比较

因为String变量的值是不可改变的,所以在频繁操作字符串的时候,就会产生极大的垃圾空间,影响程序的运行。而Java提供了可变的字符串缓冲区StringBuffer和StringBulid解决String带来的问题。

StringBuffer
    (1)线程安全的可变字符序列,字符串可以发生改变的字符串类。字符串缓冲区类。
    (2)构造方法:
  A:StringBuffer() //构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
  B:StringBuffer(int capacity)//构造一个不带字符,但具有指定初始容量的字符串缓冲区。
  C:StringBuffer(String str) //构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
    (3)成员方法:
  A:添加功能
    public StringBuffer append(anyType varName); //在缓冲区的末尾追加
    StringBuffer insert(int index,String str); //在指定索引位置添加
  B:删除功能
    public StringBuffer delete(int start,int end); //从start开始删除到end结束,不包括end位置的字符
    StringBuffer delete(0,sb.length); //清空缓冲区
    public StringBuffer deleteCharAt(int index); //删除第index位置的字符
   C:替换功能
    public StringBuffer replace(int start,int end, String str);//替换字符串
    void setCharAt(int index ,char); //修改,把指定索引位置的值改成传入的char值
   D:截取功能
   public String substring(int start); //从start位置开始截取字符串
     E:反转功能
  public StringBuffer reverse(); //反转字符串的所有字符
  F:其他常用的功能
  void setLength(int len); //根据传入的len值截取缓冲区的长度
  toString() //转换成String
  int indexOf(str); //查找str在缓冲区第一次出现的位置
  int lastIndexOf(str); //从后向前查找查找str在缓冲区第一次出现的位置

StringBulider
StringBuilder与StringBuffer其实就像是孪生兄弟,使用的方式没有什么太大的区别。但是StringBuild实例不能安全使用多线程。 如果需要同步,那么就使用StringBuffer 。

StringBuilder和StringBuffer
    StringBuilder和StringBuffer都是可变的字符序列,适用于需要经常对字符串修改的操作。两者的方法的使用是一样的,区别在于多线程的安全问题。

StringBuilder和StringBuffer与String的区别
  StringBuilder和StringBuffeer是可变字符序列;String是不变得,一但被初始化,就不能改变
StringBuilder和StringBuffer的区别
StringBuilder是线程不安全的,所以效率比较高;StringBuffer是线程安全的,效率相对较低(可以解决多线程同步问题)

Java基础系列--07_String、StringBuffer和StringBuilder的更多相关文章

  1. Java基础-String、StringBuffer、StringBuilder

    看下面这段代码: public class Main { public static void main(String[] args) { String string = ""; ...

  2. 十四、Java基础---------String、StringBuffer、StringBuilder基本应用

    在前面的博客中曾提及Java的数据类型分为基本数据类型,和引用数据类型,而String便是最常见的应用数据类型,本文将着重介绍这一引用数据类型的用法. String 字符串     String类是对 ...

  3. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

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

  4. Java基础——java中String、StringBuffer、StringBuilder的区别

    (转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...

  5. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...

  6. Java基础系列2:深入理解String类

    Java基础系列2:深入理解String类 String是Java中最为常用的数据类型之一,也是面试中比较常被问到的基础知识点,本篇就聊聊Java中的String.主要包括如下的五个内容: Strin ...

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

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

  8. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  9. Java基础系列--static关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...

随机推荐

  1. mysql7笔记----遍历节点所有子节点

    mysql遍历节点的所有子节点 DELIMITER // CREATE FUNCTION `getChildrenList`(rootId INT) ) BEGIN ); ); SET sTemp = ...

  2. Redis内存模型(2):存储细节

    1. 概述 先看一下执行set hellow world时,所涉及的数据模型: (1)dictEntry:Redis是Key-Value数据库,因此对每个键值对都会有一个dictEntry,里面存储了 ...

  3. 深入介绍Java中的锁[原理、锁优化、CAS、AQS]

    1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, ...

  4. IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)

    [来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<通信交换的百年沧桑(上)>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时 ...

  5. N元模型

    在自然语言处理的任务中,拼音纠错.机器翻译等任务都需要对某个句子的下一个单词进行预测,或者评估某个句子的概率大小.例如预测如下句子的下一个单词: Please turn your home work. ...

  6. 超级简单!把文档转换成网页格式(Core)

    因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...

  7. Java数据结构和算法 - 简单排序

    Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...

  8. 7.Flask文件上传

     1.1.上传文件和访问上传的文件 upload_file_demo.py from flask import Flask,request,render_template import os from ...

  9. 【Android Studio安装部署系列】十三、Android studio添加和删除Module

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 新建.导入.删除Module是常见的操作,这里简单介绍下. 新建Module File——New——New Module... 选中 ...

  10. C++ 编译期封装-Pimpl技术

    Pimpl技术——编译期封装 Pimpl 意思为“具体实现的指针”(Pointer to Implementation), 它通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏, 是隐藏实 ...