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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. 2. public static void main(String[] args) {
  2.         String s1 = "a";
  3.         String s2 = "b";
  4.         String s3 = "ab";
  5.         System.out.println(s3 == s1 + s2);//false
  6.         System.out.println(s3 == "a" + "b");//true  
复制代码

请问一下System.out.println(s3 == s1 + s2);//false这里怎么理解啊,原理是啥啊?真心不懂

7 个回复

倒序浏览
本帖最后由 l763631191 于 2015-5-27 23:31 编辑

String s1 = "a";   是一个对象
String s2 = "b";   又一个对象
String s3 = "ab";  又一个对象  
    此时内存中有3个字符串对象  所以内存中开辟了3个空间,有3个内存地址
     所以s3 == s1 + s2  肯定是假的
   "a" + "b"即为:“ab”  有了第4个对象 String s4=“ab”;
    当字符串的内容一样时,就不会再开辟空间了而是把s3的字符串对象放在常量池中(位于共享区)。
    s3  s4指向的都是同一个地址了,所以相等。
回复 使用道具 举报
guoyangpeng 来自手机 中级黑马 2015-5-28 06:22:42
藤椅
受教了!
回复 使用道具 举报
受教了。。
回复 使用道具 举报
一楼正解,顶一个!
回复 使用道具 举报
一楼正解,字符串好像都是存放在字符串常量池中的,
回复 使用道具 举报
niuapp 来自手机 中级黑马 2015-5-28 08:14:26
7#
一楼说的好啊
回复 使用道具 举报
把==改成equals就是跟你想象的变得一样了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马