String对象的声明操作和Java内存管理机制

来源:互联网 发布:hessian java 编辑:程序博客网 时间:2024/06/06 09:53

字符串对象的声明和操作

字符串创建的两种方式

//第一种 s1 == s2   返回false;String s1 = new String("abc");String s2 = new String("abc");//第二种 s3 == s4  返回trueString s3 = "abc";String s4 = "abc"; 
  1. 声明字符串时采用第一种方式会在字符串池里给s1 和 s2所指向的字符串 分别开辟内存空间。
  2. 采用第二种方式会先将s1 创建的字符串“abc”保存在字符串池里,如果有创建相同的字符串“abc”时 ,只需将“abc”的地址赋给变量即可。这里是将“abc”的地址赋给s3和s4,即s3和s4指向同一个字符串“abc”。这种方式可以节约内存空间的占用,减少资源的浪费。

    • String对象是不可变的

    • 类中每个看来会修改String值的方法,其实都创建了String对象(包含修改后的字符串内容)

    • String的只读特性使代码执行效率别较高

    • 字符串字面值存储于字符串池中,String对象优先指向字符串池,避免反复生成重复的字符串实例

    • 系统对字符串的非修改处理效率很高,远远高于另外两个字符串类StringBuilder 和StringBuffer

String对象的常用方法

  • length()返回此字符串长度
  • charAt(int index)-返回索引处的char值
  • concat(String str) 将指定字符串连接到此字符串的结尾
  • contains(CharSequence s)是否包含指定的字符串序列
  • equals(Object obj)将字符串与指定的对象比较
  • compareTo(String anotherString) 按字典顺序比较两个字符串
  • indexOf(int ch) 返回指定字符在此字符串中第一次出现的索引
  • split(String regex)根据匹配给定的正则表达式来拆分字符串
  • substring(int beginIndex) 截取字符串
  • toLower/upperCase()将指定字符串进行大小写转换

java对象的内存管理机制

  • 在使用new创建对象,在堆内存分配对象空间、初始化
  • 在方法栈中定义局部变量,持有对堆内存中对的对象的引用
  • 方法执行完返回,栈内存自动释放,局部变量销毁
  • 如果堆内存的对象没有变量引用它,成为垃圾,由垃圾回收器回收,释放所占堆内存。
  • java垃圾回收器:
    • java运行时系统有一个垃圾回收线程清除不再使用的对象,俗称垃圾回收器
    • 垃圾回收器定时扫描内存,对于被使用的对象加上标记,按可能的路径扫描结束后,清除未加标记的对象。
    • 被回收的对象是:
      • 不再被任何变量引用的对象
      • 引用变量自动放弃
      • 人为将引用变量置为null