字符串:
创建一个字符串类的实例有两种方式
第一种,每个由双引号引起来的,都是String这个类的实例
示例代码:
String str = "abcd";
第一种方式创建的执行流程
(1)检查字符串常量池中有没有这个字符串,如果有,直接返回这个字符串的地址,让栈中的字符串对象引用直接存储这个地址。
如果字符串常量池中没有这个字符串,会首先在字符串常量池中开辟内存空间,存储这个字符串,创建完成后会把新创建的字符串对象的内存地址返回,让栈中的对象引用存储这个字符串常量池的地址
(2)这种方式创建字符串对象不用在堆(heap)中开辟内存空间再去创建一个String对象了
第二种,通过String提供的构造方法
示例代码
String str = new String("abcd");
char[] chars = { 'a' , 'g' , 'e' };
String str1 = new String( chars );
第二种创建字符串对象的执行流程
(1)首先,会在堆中开辟内存空间去存储 通过new这种方式创建出来的字符串对象(实际上这个字符串对象也没有存储真实的数据,只不过存储了真实的字符串数据在字符串常量池中的地址)
(2)其次,会去字符串常量池中查找是否有目标字符串数据,如果有,直接返回字符串的地址,让堆中的字符串对象存储这个地址,
如果没有查找到,会先创建真实的对象,然后在返回这个地址让堆中的字符串对象存储这个地址。
(3)栈中的字符串对象引用在这种创建方式下,存储的是堆中的字符串对象。
字符串常用方法
获取字符串的长度 int length();
获取字符串中特定位置的字符 char charAt (int index);
获取特定的字符的下标 int indexOf(char ch);
获取特定的字符的最后一次出现的下标 int lastIndexOf(char ch);
将字符串转为char数组 char [] toCharArray();
将字符数组转为字符串 new String(char[] chs);
String | replace(char oldChar, char newChar) | 返回从替换所有出现的导致一个字符串 oldChar 在此字符串 newChar 。 |
---|---|---|
String[] | split(String regex) | 将此字符串拆分为给定 regular expression的匹配 项 。 |
String | substring(int beginIndex) | 返回一个字符串,该字符串是此字符串的子字符串。 |
boolean | endsWith(String suffix) | 测试此字符串是否以指定的后缀结尾。 |
boolean | startsWith(String prefix) | 测试此字符串是否以指定的前缀开头。 |
boolean | isEmpty() | 返回 true ,当且仅当, length() 是 0 。 |
String | toLowerCase() | 使用默认语言环境的规则将此 String 所有字符转换为小写。 |
String | toUpperCase() | 使用默认语言环境的规则将此 String 所有字符转换为大写 |