关于以下程序段,正确的说法是:()
String s1="abc"+"def";//1 String s2=new String(s1);//2 if(s1.equals(s2))//3 System.out.println(".equals succeeded");//4 if(s1==s2)//5 System.out.println("==succeeded");//6
答案选CString s1="abc"+"def";//1等同于语句 String s1 = "abcdef";编译器对于字面量都直接计算,储存在常量池,String s2=new String(s1);//2使用new关键字创建String 对象 s2 在堆栈中都开辟内存空间,字符串"abcdef"的值存在栈中s2中存的是指向字符串"abcdef"的地址,存在堆中;s1.equals(s2)equals 判断内容值相等 此语句返回true 所以接着行4被执行== 判断的是地址值相等,显然s1==s2为false。所以行6不被执行