.一个java问题 希望详细解答下

1个回答

  • public class StringCompareTest

    {

    public static void main (String [] args)

    {

    //s1直接引用常量池中的“高等数学”

    String s1 = “高等数学” ;

    String s2 = "高等" ;

    String s3 = "数学" ;

    String s4 = "高等" +"数学" ; //编译时就计算出来

    String s5 = "高等"+"数"+"学"; //编译时就计算出来

    String s6 = s2 + s3 ; //编译时没计算出来

    //使用new构造器创建新的String对象,s7引用新创建的String对象

    String s7 = new String("高等数学");

    System.out.println(s1==s4) ; //true

    System.out.println(s1==s5) ; //true

    System.out.println(s1==s6) ; //false

    System.out.println(s1==s7) ; //false

    常量池保证相同的字符串直接量只有一个,不会产生其他的副本,例如,上面例子中,s1 s4 s5所引用的字符串在编译时就确定下来了,因此,它们都将引用常量池中的同一个字符串。