Java之字符串

String

  • 转载:http://blog.csdn.net/zhangerqing

1.String简介

初始化
  • String声明的字符串,长度是不可变的。
  • String的底层是基于字符数组的
  • 一般的初始化方式:String s = “Hello world”
    • JVM的栈内存中产生一个 s 引用变量,堆内存中产生Hello world字符串对象,s 指向了Hello world的地址。
    • 上面的这种方式产生的字符串属于直接量字符串对象,JVM在处理这类字符串的时候,会进行缓存,产生时放入常量池,当程序需要再次使用的时候,无需重新创建一个新的字符串,而是直接指向已经存在的字符串。
  • String对象的构造方法
    • String() ----- 初始化一个String对象,表示一个空字符串序列
    • String(String value) ------ 利用一个直接量创建一个新串
    • String(char[] value) ------- 利用一个字符串数组创建
    • String(char[] value) -------- 截取字符数组,从offset开始count个字符创建
    • String(StringBuffer buffer) ------- 利用StringBuffer创建
  • String类的一些常用的方法
    • public int length() — 获取字符串的长度:实现是在String类里定义一个整型常量
    • public boolean equals(Object anObject) ---- 比较给定对象是否相等
    • 重写equals()的一般步骤及注意事项
        1. 使用==操作符检查,实参是否为指向对象的一个引用
        1. 使用instanceof操作符检查,实参是否为正确的类型
        1. 把实参转换到正确的类型
        1. 对于该类中每一个“关键域”,检查实参中的域与当前对象中对应的域值是否匹配
        1. 编写完equals方法之后:他是否是对称的,传递的,一致的
    • public char charAt(int index) ---- 获取指定位置的字符
    • public int indexOf() ---- 根据给定的字符串,返回他的位置
    • public String substring() ---- 截取字符串
    • public String[] split(String regex) ---- 该方法用于分割字符串,得到一个String类型的数组,参数是个正则表达式
    • public native String intern() ---- 返回字符串一个规范
一些常见的问题,处理结果
  • String s = “123” + “456”; 内存中产生几个字符串对象?
  • 如果split()函数的参数在要分割的字符串中没有怎么办?如String s = “Hello World” ,我现在调用 String[] s2 = s.split(“abc”), 返回什么?
关于字符串自动类型转换分析
  • 常量池是在编译期确定好的
常量池
  • 一般就是指字符串常量池,是用来做字符串缓存的一种机制,当创建字符串的时候,JVM会先去常量池中找。常量池是针对在编译期间就确定下来的常量而言。
  • 当类被加载后,常量池也会被搬到方法区的运行时常量池

2. StringBuffer,StringBuilder

1.初始化
  • Stringbuffer和StringBuilder可变字符串类
  • 构造方法
    • StringBuffer(): 默认开辟16个字符的长度空间
    • public StringBuffer(int paramInt):开辟指定大小的空间
    • public StringBuffer(String paramString):开辟paramString.length + 16大小的空间
    • public StringBuffer(CharSequence paramCharSequence)
    • 都是调用父类的构造器super()来开辟内存。这方面StringBuffer和StringBuilder都一样,且都实现AbstractStringBuilder类
2.主要方法
  • 二者几乎没什么区别,基本上都是调用父类的各个方法,一个重要的区别是StringBuffer是线程安全的,StringBuilder是非线程安全的,所以效率要高一些
  • public synchronized int length():获取的当前字符串的长度
  • public synchronized int capacity():获取的是当前缓冲区的大小
  • public boolean equals(Object paramObject): 没有重写父类的equals(), 只有地址和内容都相等的字符串,结果才会返回true
  • public synchronized void trimToSize():用于将多余的缓冲区空间释放出来
字符串处理类StringTokenizer
  • StringTokenizer是java.util包下的一个类,用于对字符串做处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值