基本介绍
从概念上来讲,java字符串就是Unicode字符序列,由多个字符构成。在java类库中提供了字符串类String,每个用双引号(“”)括起来的字符串都是String类的一个实例
字符串的一些基本操作
创建字符串
String s = "hello world";
拼接字符串。对于字符串的拼接,我们使用+号就可以完成
String s = "hello" + " " + "world";
获取字符串长度字 。符串.length()就可以获取到字符串长度(字符串长度就是字符的数量)
String s = "hello";
int length = s.length(); // 长度为5
字符串截取字串,我们使用字符串.subString(),传入2个参数,第一个是从什么位置开始,第二个是从什么位置结束,第二个参数是可选的,不传默认就是字符串长度
String s = "hello";
String substring = s.substring(0, 1); // 左闭右开原则,substring的值为 h
字符串比较,字符串比较不能使用==,要使用字符串.equals()来进行比较,传入要比较的字符串,相等就返回true
String s1 = "hello";
String s2 = "Hello";
System.out.println(s1.equals(s2)); // 输出false
不可变字符串?&修改字符串
在java里面的String类,字符串的内容是不能修改的,所以也被称为不可变字符串。也确实是这样的,String并没有提供修改字符串的api,我们也不能修改字符串的内容,在String类里面,字符串的存储是使用的char[] 来进行存储的,修饰符是final。
那么,我们就真的不能修改字符串的内容了吗?当然是可以的,我们可以利用反射机制来对字符串的内容进行修改。下面的代码就会对字符串内容进行修改
public static void test() throws NoSuchFieldException, IllegalAccessException {
String s = "hello";
System.out.println("修改前s=" + s + "---s的hashcode=" + s.hashCode());
Field field = s.getClass().getDeclaredField("value");
field.setAccessible(true);
char[] value = (char[]) field.get(s);
value[0] = 'H';
value[2] = 'L';
value[4] = 'O';
System.out.println("修改后s=" + s + "---s的hashcode=" + s.hashCode());
}
上面代码会将字符串的内容从hello修改到HeLlO,输出如下
修改前s=hello---s的hashcode=99162322
修改后s=HeLlO---s的hashcode=99162322
常见Api
字符串可以说是用的最多的一个类,基本所有方法都有使用到,建议都去熟悉一下。我们要查看字符串的所有方法,使用IDEA进入到String类,然后点击structure标签查看方法即可
我们根据方法上面的注释理解即可,都很简单