java基础相关
String类
String 用来表示一个字符串,具有以下特点:
- java.lang.String 使用了final修饰,因此 不能 被继承。
- 字符串底层封装了字符数组以及针对字符数组的操作算法。
- 字符串一旦创建,对象永远无法改变,但字符串引用可以重新复制。
- java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码。
字符串常量池
java在堆内存中开辟了一段空间用于缓存所有使用字面量形式创建的字符串对象,并在后期再次使用该字面量创建字符串时重用对象,避免内存中堆积大量内容一样的字符串对象来减小内存开销。
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象地址。
String s1 = "123abc";//字面量
String s2 = "123abc";//与s1字面量相同,重用对象
//地址相同,说明s2重用了s1对象
System.out.println(s1==s2);//true
String s3 = "123abc";
System.out.println(s1==s3);//true
注意:
通常我们判断字符串都是比较内容,因此应当使用字符串的equals方法
/*
这里触发了一个编译器的特性:
编译器在编译期间若遇到几个计算表达式,发现在编译期可以确定结果时就会进行计算
并将结果编译到class文件中,这样以来JVM每次执行字节码文件就无需再计算了。
下面的代码会被编译器改为:
String s5 = "123abc";
也因此s5会重用常量池中的对象,所以地址与s2相同
*/
String s5 = "123" + "abc";
System.out.println("s5:"+s5);
System.out.println(s2==s5); //true
字符串常用方法:
返回长度int length()
返回当前字符串的长度(字符个数)
String str = "我爱java!";
int len = str.length();
System.out.println("len:"+len);
获取元素下标indexOf()
检索给定字符串在当前字符串中的位置,若当前字符串不含有给定内容则返回值为-1
String str = "echo.li.blue";
int index = str.indexOf("l");//5
System.out.println(index);//5
重载方法,可以从指定位数开始检索:
index = str.indexOf("l",6);//3
// 字符 指定位数
System.out.println(index);
检索最后一次出现l的位置lastIndexOf()
index = str