创建了多少个对象,包括String对象

Mon*_*nis 0 java

任何人都可以告诉我创建了多少个对象.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)

Jun*_*san 5

仅创建两个对象.你做的第一个对象:

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.

  • 我知道伙计,请整个问题 (4认同)