1.String类是不可变字符序列,因为用final修饰
2.String位于java.lang包中,Java程序默认导入java.lang包下的所有类
3.Java字符串就是Unicode 字符序列
4.Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例
public class Wang {
public static void main(String[] args){
String str="abc";
String str1=new String("abc");
String str2="abcd"+"ef";
String str3="abc";
System.out.println(str==str3);//判断是否为同一个对象
System.out.println(str==str1);
System.out.println(str.equals(str1));//判断字符是否相等
}
}
运行结果见下:
true
false
true
public class Wang {
public static void main(String[] args) {
String str ="aabbcc";
String str1=str.substring(2,5);
System.out.println(str);//输出为:aabbcc; str是不可变字符序列
System.out.println(str1);//输出为:bbc
System.out.println("###########");
//编译器做了优化,直接在编译的时候将字符串进行拼接;
String str2="hello"+"java";//相当于str2="hellojava";
String str3="hellojava";
System.out.println(str2==str3);//true;
String str4="hello";
String str5="java";
//编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化;
String str6=str4 + str5;
System.out.println(str3==str6);//false;
System.out.println(str3.equals(str6));//作字符串比较时,使用equals不要使用== ;
}
}
StringBuilder
public class Wang {
public static void main(String[] args) {
//StringBuilder线程不安全,效率高(一般使用它);StringBuffer线程安全,效率低
StringBuilder sb=new StringBuilder("abcdefg");
System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb);
sb.setCharAt(2,'M');
System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb);
}
}
运行结果见下
1b6d3586 //地址
abcdefg
1b6d3586 //地址
abMdefg
StringBuilder的用法
public class Wang {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();
for(int i=0;i<26;i++){
char temp =(char)('a'+i);
sb.append(temp);
}
System.out.println(sb);//abcdefghijklmnopqrstuvwxyz
sb.reverse();//倒序;
System.out.println(sb);
sb.setCharAt(3,'王');
System.out.println(sb);
sb.insert(0,'我').insert(3,'喜').insert(6,'凡').insert(9,'你');
System.out.println(sb);
sb.delete(20,23);
System.out.println(sb);
}
}
运行结果见下
abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba
zyx王vutsrqponmlkjihgfedcba
我zy喜x王凡vu你tsrqponmlkjihgfedcba
我zy喜x王凡vu你tsrqponmlkgfedcba
循环累加字符串使用StringBuilder
public class Wang {
public static void main(String[] args) {
StringBuilder sb1=new StringBuilder("");
long num1=Runtime.getRuntime().freeMemory();
long time1=System.currentTimeMillis();
for(int i=0;i<5000;i++){
sb1.append(i);
}
long num2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
System.out.println("StringBuilder占用内存:"+(num2-num1));
System.out.println("StringBuilder占用时间:"+(time2-time1));
}
}
运行结果见下
StringBuilder占用内存:-1331712
StringBuilder占用时间:0