java中String类是一个重要的类,它也是java中的一个应用数据类型。首先在java源码中String是被定义为final类,即它不可以被继承,而且字符串是常量,不能被改变,给字符串赋新值,拼接新字符其实都是新创建了一个String对象,然后使String变量指向新对象。字符串"abc"可以看成是一个String类的一个实例或者说为对象,字符串是常量一旦被赋值便不能改变,其本质上就是数组。
String a = "";与String a = null;的区别就像是你在银行开了个账户,但是一分钱没有 和 你根本就没开账户的区别。
StringBuilder类与String类,String不可改变,StringBuilder可以改变,两者可以通过方法相互转换。StringBuilder通过toString()方法转换为String,String通过new StringBuilder(String str)构造方法转换为StringBuilder类型。
此外还有一个StringBuffer类与StringBuilder类相似,不同处在于前者速度慢一点,但是线程安全,后者相反,一般后者常用,但还是看具体要求采用具体方法。
String类常用构造方法:
String(String original):将字符串数据封装为字符串对象
String(char[] value):将字符数组的数据封装为字符串对象
String(char[] value,int index,int count):将将字符串数组的一部分数据封装为字符串对象。
上代码看看
public class Demo {
public static void main(String[] args) {
String s1 = new String("HeyDude");
System.out.println("s1 "+s1);
char[] s = {'H','e','y','D','u','d','e'};
String s2 = new String(s);
System.out.println("s2 "+s2);
String s3 = new String(s,1,4);
System.out.println("s3 "+s3);
}
}
结果
也可以直接 String s = "HeyDude";System.out.println(s4);,然而这种直接赋值与通过构造方法创建是有些不同的,看代码。
public class Demo {
public static void main(String[] args) {
String s1 = new String("HeyDude");
String s2 = "HeyDude";
String s3 = "HeyDude";
/*
* == 符号
* 比较基本数据类型时判断 值 是否相同
* 比较引用数据类型时判断 地址 是否相同
*/
System.out.println("s1 == s2为 "+ (s1 == s2));
System.out.println("s1 == s3为 "+ (s1 == s3));
System.out.println("s2 == s3为 "+ (s2 == s3));
//在java中判断String类型数据的值是否相同应使用equals()方法
System.out.println("s1与s2值是否相等 "+s1.equals(s2));
}
}
结果是 s1 == s2为 false
s1 == s3为 false
s2 == s3为 true
s1与s2值是否相等true。
这里简单说一下构造方法创建的字符串对象与直接赋值创建的字符串对象之间的不同:前者创建的对象是存放在堆内存中,而后者创建的对象是放在方法区的常量区中,这样为了方便字符串的重复使用,两者地址值自然不同,而s2和s3在字符串缓冲区中且值相同,就不创建新对象,安排指向同一个地址。
常用的String类方法
int length():获取字符串长度
boolean equals(Object anObject):比较字符串值是否相同 (参数里的Object类是java所有类的父类)
boolean equalsIgnoreCase(String anotherString):比较字符串值是否相同,忽略大小写。
boolean startsWith(String suffix):判断字符串是否以指定的字符串开头
boolean endsWith(String suffix):判断字符串是否以指定的字符串结束
char charAt(int index):获得字符串中某索引处(位置)的字符
int indexOf(String str):获得字符串中某字符串第一次出现的索引。找不到返回-1。
String substring(int beginIndex, int endIndex):获取开始索引处到结束索引处间的字符串。
char[] toCharArray():将字符串转换为字符数组
String trim():将字符串首尾空格去掉
String[] split(String regex):按照指定符号分割字符串
StringBuilder常用方法
StringBuilder append(任意类型):添加数据,并且返回自身对象。
StringBuilder reverse():反转数据
StringBuilder replace(int start, int end, String str):将[start,end]间的字符串替换为新字符串