任何人都可以告诉我创建了多少个对象.s3不是从字符串池中引用相同的hello吗?有多少String对象
/**
*
*/
package agnitio;
/**
* @author admin
*
*/
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="hello";
String s2="hello";
String s3 = new String("hello");
System.out.println(s1==s2); // true
System.out.println(s1==s3); // false
System.out.println(s2==s3); // false
}
}
Run Code Online (Sandbox Code Playgroud)
仅创建两个对象.你做的第一个对象:
String s1="hello";
Run Code Online (Sandbox Code Playgroud)
当你这样做时,内存中没有创建对象:
String s2="hello";
Run Code Online (Sandbox Code Playgroud)
这是因为JVM String类基于flyweight模式,因此如果字符串已经存在于内存中,就像您的情况"hello"一样,那么创建新引用将不会创建新对象.s1和s2都指向相同的内存位置.
当你这样做时,会创建第二个对象:
String s3 = new String("hello");
Run Code Online (Sandbox Code Playgroud)
新操作员将始终创建一个新对象.
==比较两个引用是否指向相同的内存位置.而equals则比较字符串的内容.话虽如此,正如我所提到的,s1和s2都指向相同的内存位置,因此==和equals将返回TRUE进行比较.但是s3是一个不同的对象,因此s1和s2与==操作的比较将返回false.但如果你确实等于s1,s2和s3的比较,你将得到TRUE.
| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |