-
String类:数据+相关的操作,即char[ ]+操作
■ char数组只是数据,没有操作
■ 一串字符就是字符串:char[]、String、StringBuilder
■ 字符串的”字面量“(也叫直接量),都是String类型实例
■ “字符串常量”: static final修饰的变量
public static final String TYPE = “car” //TYPE被称为常量,“car”是字面量
■ String在Java内部就是一个char[] -
String API 有一个实现原则:对象内容永远不变(意思是,只能被销毁,不能被改变。虽然看起来,它的值改变了,但改变的方式是销毁了原先的空间,创立了新的空间),也就是说String对象永远不变,这样的规定使字符串使用起来和基本类型相同,因些多个字符串相连接最好不要用+号;
-
String字面量相同时,会替换为同一个String对象的引用,常量连接的结果也被优化为一个字符串,用new String(“abc”);会开辟一块新内存;
-
String 的比较,使用equals.
-
String API(字符串的常用方法)
■ 字符串覆盖了equals(), hashCode() ,toString()
■ String字符串中的字符是有序号的,从0开始
■ 这些方法如果字符串有变化就返回新的String对象, 不变化就返回原字符串. 如: trim()
String常用方法
◆ charAt() ◆ length() ◆ trim()
◆ toLowerCase() ◆ toUpperCase()
◆ indexOf() ◆ lastIndexOf()
◆ endsWith() ◆ startsWith()
◆ substring(int start, int end)
◆ substring(int start)
◆ toCharArray() 字符串和字符可以相互转换
String str = new String(new char[]{‘1’,‘2’,‘3’});
char[] chs = str.toCharArray();
没有字符串,使用char[]程序开发也是可以的,但是通过使用字符串在程序开发过程中会方便很多;
当多个字符串进行相互连接时用StringBuffer或者StringBuilder
没有字符串,使用char[]程序开发也是可以的,但是通过使用字符串在程序开发过程中会方便很多;
当多个字符串进行相互连接时用StringBuffer
或者StringBuilder
. append()方法,表示“追加”,该方法反复操作的始终是1 个对象
. insert()方法,表示“插入”
. delete()方法,表示“删除”
StringBuilder
1) StringBuilder 是变长字符序列
2) StringBuilder 方法:append,insert … 都返回当前 StringBuilder 对象本身的引用
3) 如果软件需要大量字符串处理时候建议使用StringBuilder
4) String s = s1+s2; Java 实际上是如下代码运行:
String s=new StringBuilder(s1).append(s2).toString();
5) String s = s1+s2+s3+s4; 被优化为 String s = new
StringBuilder(s1).append(s2).append(s3).append(s4).toString();
6) s += "a"会产生两个新对象(StringBuilder, String)(笔试题)
StringBuilder buf=new StringBuilder();
buf.append(“a”);
buf.toString();
7) StringBuffer 和 StringBuilder API 几乎一样!
StringBuffer 是java 早期提供的(JDK1.0),速度稍慢,线程安全
StringBuilder 是Java5 以后提供的(JDK5.0),速度快,非线程安全
. s += “A”;相当于s = new StringBuilder(s).append(“A”).toString,每当做一次字符串拼接,就会创建一个StringBuilder 新对象,同时JVM 在适时回收这些对象,如此会严重影响性能
结论:当处理少量字符串拼接时使用String s = “a”+“b”,大量字符串拼接操作时StringBuilder,
如果对字符串性能有极高要求,则直接操作char[]数组