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

关于下面程序片段,(B)的结论是正确的。Stringa="Java";Stringb="Java";Stringx="Ja";Stringy="va";Stringc=x... 关于下面程序片段,( 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 不指向同一个实例对象
展开
 我来答
丹指鹤婷b0
2013-11-27
知道答主
回答量:24
采纳率:0%
帮助的人:4.1万
展开全部
首先你的明白字符串池(String pool)的概念,你看下面两个例子
String str1 = new String("abc");
Stirng str2 = "abc";
虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,jvm首先会在内部维护的String Pool中通过String的 equals 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至String Pool中。注意:使用第一种方法创建对象时,jvm是不会主动把该对象放到String Pool里面的,除非程序调用 String的intern方法。
所以说String a ="java"和String b ="java" 他们都是指向的是字符串池的那个引用,所以是一个实例对象。
同时,你要明白字符串相加是重新创建新的对象,所以c是一个新的对象,跟a和b肯定不是指向同一个对象
爱我所爱丶Lyb
2013-11-27 · TA获得超过408个赞
知道小有建树答主
回答量:390
采纳率:0%
帮助的人:310万
展开全部
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所引用的字符串在编译时就确定下来了,因此,它们都将引用常量池中的同一个字符串。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang21chun
2013-11-27 · 超过27用户采纳过TA的回答
知道答主
回答量:148
采纳率:100%
帮助的人:74万
展开全部
java String是一个不可变的对象。它在分配内存时是固定的。它是对象类型。是对值地址的引用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式