String一网打尽

210 阅读2分钟
学习String前必须了解JVM内方法区、堆、栈的概念,可看前一篇文章--《JVM速记笔记》

一、String

1. ==与equals

  • ==:8中基本数据类型,比“值”;引用类型,如string,比指向对象的地址
  • equals:Object类才有,基本数据类型没有。 若未重写,比指向对象地址;若重写,如String\Double\Date\Integer等比“值”

2. String

  • String a=”chenssy”
  • String b=”chenssy”
  • String c=new String(”chenssy”)
  • String d=”che”+”nssy”
  • String e=new String(“che”)+”nssy”
  • String f=”che”
  • String g=f+”nssy”
  • a==b  true 因为指向地址相同,都是常量池中的chenssy;
  • a==c  flase 因为c指向堆里的对象,尽管堆里对象也是指向常量池;
  • a==d  true 因为d也是字符串常量,而常量池里不能有两个相同的对象;
  • a==e  flase 因为new了,有自己指向地址,所以e整体地址不一样;
  • a==g  flase 因为f是引用存在,引用的值无法在编译时确定,只能在运行期Ok
  • 除非f被final修饰,因为被final修饰的会提前解析好,当然,如果f被final修饰但是通过方法调用返回的,它的值还是只能在运行期被解析,就是flase了
  • ab:方法区(字符串常量池)创建一个chenssy对象,ab是引用,存在栈中,指向常量池中的chenssy
  • c:因为是New,所以堆中会开辟一个空间,常量池中有chenssy,创建一个堆对象,将常量池中的chenssy拷贝过来,并同时指向常量池中的chenssy 图片1.png

3. String常用方法

  • .length
  • .concat 连接字符串。可直接只用+
  • .charAt
  • .equals
  • .indexOf 第一次出现的下标
  • .split
  • .trim 去除字符串两端空格
  • .reverse 反转
  • .substring(start,end) 截取字符串
  • .toCharArry
  • .toString
  • .valueOf

4. StringBuilder、StringBuffer  后者线性安全

常用方法:

  • .append(字符串)
  • .insert(下标,字符串)
  • .delete(始,终)
  • .setCharAt(位置,char)
  • .replace(始,终,字符串)
  • .reverse
  • .charAt
  • .indexOf
  • .length
  • .substring
  • .toString

5. 转换

  • String-->char[] String.toCharArray()
  • char[]-->String  String.valueOf(char[])
  • StringBuilder/StringBuffer-->String   sb.toString())
  • String-->StringBuilder/StringBuffer    new StringBuilder(string)