目录
String类
1.String类的两种实例化方式
- 直接赋值
String str = "Hello,CSDN";
System.out.println(str);
- 构造方法(String本身是一个类,类中一定存在构造方法)
String str = new String("Hello,CSDN");
System.out.println(str);
- 两种方式的区别
String str1 = "hello";
String str2 = "hello";
String str3 = "hello"; //三个str都指向同一块内存空间
原因:在JVM底层自动维护一个字符串对象池(对象数组)
如果采用直接赋值的方式进行String类对象的实例化操作,此对象将自动保存到对象池中,如果下次继续采用直接赋值的模式声明String类对象,先去对象池中找是否有指定内容,如果有,直接引用,如果没有,开辟新的空间而后将其保存到对象池中以供下次引用。
String str1 = new String("CSDN"); //产生两块空间,一块堆内存为垃圾空间,并且不会保存到对象池中。
字符串的手工入池操作
String str1 = new String("CSDN").intern();
2.字符串的相等比较
观察如下关于==比较的代码,可以看到,==在进行数值比较时,得到的结果是true,但是在进行对象的比较时,比较的是另个对象所保存的内存地址而非内容,所以得到的结果为false
public class Test {
public static void main(String[] args) {
// 数值的==比较
int a=1;
int b=1;
System.out.println(a==b); //true
// String类对象的==比较
String str1 = "Hello,CSDN";
String str2 = new String("Hello,CSDN");
System.out.println(str1==str2); //false
}
}
那么如何对两个字符串进行内容上的比较呢,我们采用String类提供的equals方法
public class Test {
public static void main(String[] args) {
// String类对象的equals比较
String str1 = "Hello,CSDN";
String str2 = new String("Hello,CSDN");
System.out.println(str1.equals(str2)); //true
}
}
- String类的eq