String声明的字符串是放在常量池里的。声明s1 = "abc"时会在常量池开辟空间放入这个串值,当你再次声明s3 = "abc"的时候会先看常量池里是否有相同的字符串,没有的话才会创建新的字符串,所以这里s1和s3指向的是同一个字符串,它们在栈中的地址值也是相同的,所以s1 = s3,而声明s2的时候用到了new,这时就会在堆内存中开辟新的空间放入这个对象,s2指向这个对象,而对象中字符串的内容是"abc",它的内容指向了常量区,但是s2和s3的地址值是不同的,因为它们指向不同的对象,但是它们equals,因为它们的内容相同。希望你能明白。
|
|