早教吧 育儿知识 作业答案 考试题库 百科 知识分享

.一个java问题希望详细解答下关于下面程序片段,(B)的结论是正确的。Stringa="Java";Stringb="Java";Stringx="Ja";Stringy="va";Stringc=x+y;A、a和b指向同一个实

题目详情
.一个java问题 希望详细解答下
关于下面程序片段,( B )的结论是正确的。
String a = "Java";
String b = "Java";
String x = "Ja";
String y = "va";
String c = x + y;
A、a 和 b 指向同一个实例对象,a 和 c 指向同一个实例对象
B、a 和 b 指向同一个实例对象,a 和 c 不指向同一个实例对象
C、a 和 b 不指向同一个实例对象,a 和 c 指向同一个实例对象
D、a 和 b 不指向同一个实例对象,a 和 c 不指向同一个实例对象
▼优质解答
答案和解析
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所引用的字符串在编译时就确定下来了,因此,它们都将引用常量池中的同一个字符串。