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. SQLite新建数据库及txt文件(CSV文件)导入

    1.安装准备: Windows系统环境: 安装:SQLiteExpert  及 官网的SQLite tool  我们要用到其中的SQLite.exe       地址:https://www.sqli ...

  2. 秋季学期学习总结&&以及下学期的期待

    秋季总结 第一学期已经结束了,下面来分点归纳下知识点: ·基础编程:利用c语言来进行编程 ·分支结构:利用if-else语句和switch语句编程,以及字符型数据的利用 ·循环结构:利用while.d ...

  3. java的poi技术读取和导入Excel实例

    本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下. 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用 ...

  4. 栈到CLR

    提起栈想必会听到这样几个关键词:后进先出,先进后出,入栈,出栈. 栈这种数据结构,数组完全可以代替其功能. 但是存在即是真理,其目的就是避免暴漏不必要的操作. 如角色一样,不同的情景或者角色拥有不同的 ...

  5. 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

    一.前述 怎么样对训练出来的模型进行评估是有一定指标的,本文就相关指标做一个总结. 二.具体 1.混淆矩阵 混淆矩阵如图:  第一个参数true,false是指预测的正确性.  第二个参数true,p ...

  6. 【Python3爬虫】用Python发送天气预报邮件

    此次的目标是爬取指定城市的天气预报信息,然后再用Python发送邮件到指定的邮箱. 一.爬取天气预报 1.首先是爬取天气预报的信息,用的网站是中国天气网,网址是http://www.weather.c ...

  7. 移动APP及游戏推广,有预算为什么还起不了量

    本文转自公众号:caoz的梦呓,作者是互联网行业内资深人士,这里分享一篇他本人写的经验干货,希望能给大家带来点帮助. 在广告分析师群,起量是他们讨论最多的话题之一. 我们刚做游戏出海业务的时候,第一款 ...

  8. Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 HBase 简介和应用场景 spring-boot- ...

  9. (二)surging 微服务框架使用系列之surging 的准备工作consul安装

    suging 的注册中心支持consul跟zookeeper.因为consul跟zookeeper的配置都差不多,所以只是consul的配置 consul下载地址:https://www.consul ...

  10. 使用Atlas进行元数据管理之Glossary(术语)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...