String(字符串)

1.String类的构造方法
  • 不采用new的方式,而是像基本类型那样直接赋值
String str = "我是帅哥!!!";
  • 采用无参构造器
String str = new String();
  • 采用有参数的构造器
//String类型的参数
String str = new String(String original);
//byte[]数组类型的参数,每一个byte数代表一个字符
String str1 = new String(byte[] bytes); 
//byte[]类型和charset类型的参数,charset是设置字符编码集,如utf-8
String str2 = new String(byte[] bytes, Charset charset);
//Stringbuffer参数
String str3 = new String(StringBuffer buffer);
//StringBuilder参数
String str4 = new String(StringBuilder builder);
//其余创建方式很难见到,有兴趣可以及翻看JavaAPI
2.String类在内存中的创建过程

我们以直接赋值创建String和new String();创建String两种方式来分别讲解。

  • 首先是直接赋值创建String类
String str = "我很帅";

java reduce三个参数 stream java newstring()三个参数_赋值

  • 然后是利用构造器来创建String类
String str = new String("我真的很帅");

java reduce三个参数 stream java newstring()三个参数_字符串_02

3.String类的特性

在String类的成员变量中有个属性是private final char value[];正是因为final和private修饰,所以字符串有两个不可变特性,其不可变表现在字符串对象一旦被创建,字符串长度不可变,字符串内容不可变。

4.String类的常用方法
  1. equals()
    重写自Object类的方法,用于比较两个字符串值是否相同。
  2. hoshCode()
    重写自Object类的方法,将当前字符串的每一个char元素拆开乘以31并求和。
  3. compareTo(String str)
    实现自Compereble接口的方法,按照Unicode编码的索引顺序进行比较
  4. toString()
    重写自Object类的方法,输出字符串值。
  5. charAt(int index)
    返回给定index位置对应的字符
  6. codePointAt(int index)
    返回给定index位置的code码
  7. length()
    返回字符串长度,其实是底层char[]的长度(注意区别数组中的length、String的length()方法和集合的size()方法)
  8. concat(String str)
    将给定的字符串拼接到当前字符串当中,与“+”类似。
    concat()和+的比较:
  • 从拼接效率上来说,concat方法要比+效率高(如果频繁拼接字符串还是使用StringBuilder、StringBuffer更好)
  • 从功能上来讲,concat只能拼接字符串,而+可以拼接各种数据类型更加比较灵活
  1. contains(CharSequence s)
    判断给定的s是否存在字符串中
  2. startsWith(String prefix) / endsWith(String suffix)
    判断此字符串是否以××××开头 / 结尾
  3. getBytes()
    返回该字符串对应的byte[]
  4. toCharArray()
    返回该字符串对应的char[]
  5. indextOf(int ch) / indexOf(int ch , int fromIndex) / indextOf(String str) / indexOf(String str , int fromIndex)
    indexOf的四种重载方法,作用是找寻给定字符第一次出现的位置,其中int ch参数对应的是字符的编码值,int fromIndex参数代表从什么位置开始找,没有返回-1
  6. lastIndexOf(int ch) / lastIndexOf(int ch ,fromindex) / lastIndexOf(String str) / lastIndexOf(String str , int fromIndex)
    lastIndexOf的四种重载方法,作用是找寻给定字符最后一次出现的位置,其中int ch参数对应的是字符的编码值,int fromIndex参数代表从什么位置开始找,没有返回-1
  7. isEmpty()
    判断当前字符串是否为空字符串。
    isEmpty()与null的区别
  • isEmpty()返回true的时候证明这个字符串内容为"",也就是俗称空串,意思是这个字符串对象产生了,只不过是空值而已;
  • null代表这个String根本没有被创建出来。
  1. replace(char oldChar, char newChar)
    将给定字符串替换成另外的字符串
  2. replaceAll(String regex, String replacement)
    将给定字符串替换成另外的字符串,可以写正则表达式
  3. replaceFirst(String regex, String replacement)
    只将第一次出现的那个指定字符串给替换掉,可以写正则表达式
  4. split(String regex)/split(String regex,int limit)
    按照指定规则拆分,limit代表拆成多少份
  5. substring(int beginIndex) / substring(int beginIndex , int endIndex)
    将字符串截取,从beginIndex开始到endIndex结束,如果不使用endIndex参数则默认截取到末尾。
  6. toUpperCase() / toLowerCase()
    将字符串全部大写 / 小写
  7. trim()
    去掉前后空格
  8. matches(String regex)
    判断此字符串是否满足自己定义的规则
5.String类在面试中经常遇到的问题
  1. 在创建String中,new一个新的字符串会产生多少空间?
    具体请参看上面第二部分创建String内存详情图
  2. “==”与equals()的区别
    详情请参看“==”和equals的用法及区别
  3. 能够解释下面的内存原理
String str1 = "我很帅";
String str2 = str1;
String str3 = new String("我很帅");
String str4 = new String("我真的很帅");

java reduce三个参数 stream java newstring()三个参数_字符串_03