String对象的特点
mian中两种方法构造string:
public class String_class {
public static void main(String[] args) {
//使用构造方法的方式得到对象
char[] chs = {'a', 'b', 'c'};
String s1 = new String(chs);
String s2 = new String(chs);
System.out.println(s1 == s2);
//直接赋值的方式得到对象
String s3 = "abc";
String s4 = "abc";
System.out.println(s3 == s4);
//比较字符串对象地址是否相同
System.out.println(s1 == s3);
}
}
显示结果:
false
true
false
构造方法: s1、s2分别new一个string对象的同时会在堆内存中申请一个属于自己自己的地址空间,而“ == ”对于 引用类型 等同于object类中的equals方法比较的是s1、s2是不是属于同一个对象,所谓同一个对象指的是内存中的同一块存储空间。所以在第一个输出语句是false
另外: 如果在String中只想对比两个字符串的内容是否相同,不关心是否属于一个地址空间,可以直接调用String中的equals()方法
直接赋值: s3、s4中的s3在堆内存中会有一个地址空间,不过这个地址空间是属于常量池中的,当s4进行赋值时会在常量池中发现一样的元素,直接将其地址指向s4。所以s3和s4对象在内存中是属于同一块存储空间的。第二个输出语句的是true
同理: 在第三个输出中也是false