package JavaCloumn;
public class TestString {
public static void main(String[] args) {
String s1 = "100";
String s2 = "100";
System.out.println(s1 == s2); // true
/*
* "str" 这种形式的字符串,是放在常量池中的, 执行 s1 = "100"
* 时,会先看常量池中是否存在该字符,如果存在就直接引用,所以
* s1, s2 应用的其实是同一个对象。
* 所以返回 true
*/
String s3 = new String("100");
String s4 = new String("100");
System.out.println(s3 == s4); // false
/*
* 通过 new String("str") 值在堆内存中开辟一块新内存的,每个通过 new
* 创建的对象,都有自己的内存空间
* 所以:s3 与 s4 不是同一个对象, 返回 false
*/
}
}
要点:###
- 每个通过 new 创建的对象,都已自己独有的堆空间。
- "str" 像这样创建的字符串对象,存在于常量池中,创建时会先查找常量池中是否存在,如果存在就直接引用已存在的对象。