字符串对象的声明和操作
字符串创建的两种方式
//第一种 s1 == s2 返回false;
String s1 = new String("abc");
String s2 = new String("abc");
//第二种 s3 == s4 返回true
String s3 = "abc";
String s4 = "abc";
- 声明字符串时采用第一种方式会在字符串池里给s1 和 s2所指向的字符串 分别开辟内存空间。
- 采用第二种方式会先将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