A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冒牌高手 中级黑马   /  2014-9-1 22:16  /  1334 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请大神解释下以下代码的结果...

  1. String s1="a";
  2.                 String s2="b";
  3.                 String s3="ab";
  4.                 String s4=s1+s2;
  5.                 System.out.println((s1+s2)==("a"+"b"));
  6.                 System.out.println((s1+s2)=="ab");
  7.                 System.out.println(s3==("a"+"b"));
  8.                 System.out.println(s3=="ab");
  9.                 System.out.println(s4==("a"+"b"));
  10.                 System.out.println(s4=="ab");
复制代码



5 个回复

倒序浏览
{:2_31:}是和常量池有关系吗,早忘记了
回复 使用道具 举报
S4必须要初始化才能知道结果,不存放在常量池里,上面的存放在产量池中,可以加final解决
回复 使用道具 举报
涉及到变量的运算,都在各自的内存中运行,但是串池(确切的说是常量池)的操做是按照拼接的形式。
题中的s1,s2,s3都是指向串池的引用,但是s4不一样,操作的是变量啊,所以s4和别人比较都是false,
(s1+s2)同理还是在操作变量,开辟内存,但是"a"+"b"就是在操作串池,拼接几就是几。
所以比较结果是false
s3不一样,s3是直接指向了常量池,所以只要内容吻合了就为true

回复 使用道具 举报
旭辉lin 发表于 2014-9-3 16:25
涉及到变量的运算,都在各自的内存中运行,但是串池(确切的说是常量池)的操做是按照拼接的形式。
题中的s1, ...

我知道规律,但是不知道在内存中到底发生了什么...
回复 使用道具 举报
冒牌高手 发表于 2014-9-8 15:25
我知道规律,但是不知道在内存中到底发生了什么...

再往里就要涉及到内存的分配问题,太高深,不晓得了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马