java内存分配问题,请进....

为什么以下打印出的是false?能帮忙分析一下么?Strings1="java";Strings2="blog";Strings=s1+s2;System.out.pri... 为什么以下打印出的是false?能帮忙分析一下么?

String s1="java";
String s2="blog";
String s=s1+s2;
System.out.println(s=="javablog");

不是说字符串不变性么?s1的地址指向"java"这个内容,s2的地址指向"blog"这个内容,执行String s=s1+s2之后,开辟了一个新的内容"javablog",然后s指向它,这样,s==“javablog”的意思,就是比较s和“javablog”的地址,它们的地址不是相同的吗?
请指出我理解错的地方,谢谢!
展开
 我来答
乌微月2S
2013-07-24 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2904万
展开全部

String s1="java"; 一个地址
String s2="blog";一个地址

String s=s1+s2;一个地址

System.out.println(s=="javablog"); javablog 又一个地址。

以上会有4个地址,==比较的是地址,所以就false了。

 

		String s1="java";
String s2="blog";
String s=s1+s2;
String s3="javablog";
System.out.println(s=="javablog");
System.out.println(s3=="javablog");
System.out.println(s1=="java");

你再试试这个,这里面还有一个字符串常量池的问题,还有字符串拼接的问题啊。

你可以需要深入了解。

滑蛋丶牛肉
2013-07-24 · TA获得超过439个赞
知道小有建树答主
回答量:294
采纳率:0%
帮助的人:251万
展开全部
字符串用加号操作会生成一个新的对象,因此s1一个对象,s2一个对象,s一个对象,"javablog"一个对象,总共有4个String对象,他们的地址都是不同的

建议从Thinking in Java看起,这里面有很多基础的东西
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
养初厹06
2013-07-24 · TA获得超过203个赞
知道小有建树答主
回答量:784
采纳率:0%
帮助的人:416万
展开全部
这问题的确不好解释,呵呵,一般的解释也是硬靠的。所以判断字符串相等很少用==而用equals。我觉得可能就是因为字符串相加了导致的,重新申请了空间。如果你不用这个操作而是直接写成一个的他就是相等的。
更多追问追答
追问
s=="javablog"这个你如何理解呢?
追答
比较的是内存的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天涯浪子B
2013-07-24 · TA获得超过148个赞
知道答主
回答量:295
采纳率:0%
帮助的人:181万
展开全部
告诉你:String s=s1+s2;就等于String s = new String(a + b);
想用==来比较的话要先将s放进String池中,s.intern == "javablog";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式