创建字符串
1.直接复制(常量) 在常量池内开辟一块内存空间
String str="abcdef"//常量;
- 再次直接复制相同的字符串,不会开辟内存空间,常量池中有指定内容,直接进行引用
String str1="abcdef";
2.new一个对象 在堆上开辟一块内存空间
String str2=new String("Hello");
3.字符数组转换为字符串
char[] array={'a','b','c'};
String str3=new String(array);
比较字符串
1.比较引用,看存放的地址是否相等
String str1="abc";
String str2="abc";
System.out.println(str1==str2);//true
String str1="abc"+"def";//编译期就变成了abcdef
String str5="abc"+new String("def");//产生了两个对象
//abc在常量池 ,new了一个内存,str5指向value和abc所新组成的一块内存
System.out.println(str==str5);//false,比较引用,看存放的地址是否相等
String str1=new String("abcdef");
String str2=new String("abcdef");
System.out.println(str1==str2);//false
2.比较内容是否相同
1.使用equals()方法
String str="abcdef";//abcdef为常量,在常量池
String str1="abc"+"def";//编译期就变成了abcdef
System.out.println(str.equals(str1));//比较内容是否相同
- 为防止空指针异常写成:
System.out.println(str.equals("abcdef"));//可能空指针异常
System.out.println(("abcdef").equals(str));
2.使用a.compareTo(b)方法
返回值为字符串a的长度-字符串b的长度
String str="abcdef";//直接赋值
String str1="abcdef";
System.out.println(str.compareTo(str1));
//比较str和str的值(String中已经实现了compareTo接口)
3.引用=引用
String str="abcdef";//直接赋值
String str2=str;
str="hello";//str指向新的地址
System.out.println(str2);//输出hello
4.intern()方法
1.常量池当中存在,返回常量池当中字符串对象的地址。
2.常量池当中不存在,那么在常量池中生成该对象的引用。
String str="abcdef";
String str1=new String("abcdef").intern();
System.out.println(str==str1);//true