package com.guaji.exer;
import org.junit.Test;
public class StringExer {
/*
* 1:String是一个final类,代表不可变的字符序列 2:String对象的字符内容是存储在一个字符数组final value[]中的
* 3:String 声明了Serializable接口:表示字符串是支持序列化的,并且实现了Comparable:表示String可以比较大小
*
* String代表不可变的字符序列体现: 1:当对字符串重新赋值的时候,需要重写指定内存区域赋值,不能使用原有的value进行赋值
* 2:当对字符串进行拼接操作的时候,也需要重写指定内存区域赋值
* 3:当调用String的replace()方法修改指定字符或者字符串时,也需要重写指定内存区域赋值 ......
*
* 关于String,StringBuffer,StringBuilder三者的异同? 1:String:不可变的字符序列,底层使用char[]储存
* 2:StringBuffer:可变的字符序列,线程安全,效率偏低 底层使用char[]储存
* 3:StringBuilder:可变的字符序列,非线程安全,效率高 jdk5.0新增 底层使用char[]储存
* 4:StringBuffer:底层创建了一个长度为16的char[]型数组,默认情况下,扩容为原来的一倍+2,同时将原来的数组元素赋值到新的数组中
*/
@Test
public void stringBuilderExer() {
StringBuilder str = new StringBuilder("hello");
str.append("World");
System.out.println(str);
int indexOf = str.indexOf("o");// 返回该字符的下标
System.out.println(indexOf);
String substring = str.substring(5, 6); // 字符串的截取,包前不包后
System.out.println(substring);
StringBuilder delete = str.delete(2, 4);// 字符串的删除,包前不包后
System.out.println(delete);
}
/*
* String的常用类有 int length():返回字符串的长度: return value.length * char
* charAt(int index): 返回某索引处的字符return value[index] * boolean
* isEmpty():判断是否是空字符串:return value.length == 0 * String
* toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写 * String
* toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写 * String
* trim():返回字符串的副本,忽略前导空白和尾部空白 * boolean equals(Object obj):比较字符串的内容是否相同
* * boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写 *
* String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+” int
* compareTo(String anotherString):比较两个字符串的大小 * String substring(int
* beginIndex):返回一个新的字符串,它是此字符串的从 beginIndex开始截取到最后的一个子字符串。 String
* substring(int beginIndex, int endIndex)
* :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串 boolean
* endsWith(String suffix):测试此字符串是否以指定的后缀结束 boolean startsWith(String
* prefix):测试此字符串是否以指定的前缀开始 boolean startsWith(String prefix, int
* toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
*
*
*
*
*
*
*/
@Test
public void stringExer() {
// 1: 通过字面量的方式(区别于new方法)给一个字符串赋值,此时的字符串声明在字符串常量池中,字符串常量中不会存储相同内容的值
String str = "hello";
String str1 = "World";
// 2:常量和常量拼接结果在常量池,且常量池中不会存在相同内容的常量,只要其中有一个是变量,结果就在堆中
String str2 = "helloWorld";
String str3 = "hello" + "World";
System.out.println(str2 == str3);
String str4 = str + "World";
System.out.println(str2 == str4);
System.out.println("*******" + str2.equals(str4));// equals比较的是数值
// 3:如果拼接的结果调用intern()方法,返回值就在常量池中
String intern = str4.intern();
System.out.println(str2 == intern);
}
}
java之String 和StringBuffer和StringBuilder
最新推荐文章于 2024-05-15 22:17:01 发布