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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ruibocool 中级黑马   /  2015-4-22 22:36  /  1171 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                String str1=“JavaEE”;
                String str2="Android";
                String str3="JavaEE"+"Android";
                String str4=str1+str2;
                System.out.println(str3==str4);

为何返回的是false

7 个回复

倒序浏览
字符串相加当有变量参与时,其实它会做一个操作,在堆内存中new一个对象,所以它的地址值和常量池中的不一样。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
有引用类型变量参与运算,地址值不一样吧!
回复 使用道具 举报
比较的是地址,没重写方法
回复 使用道具 举报
本帖最后由 横看成岭侧成锋 于 2015-4-23 09:32 编辑

不错,顶一下
回复 使用道具 举报
优质码农 发表于 2015-4-23 00:33
比较的是地址,没重写方法

==怎么重写????
回复 使用道具 举报
==比较的是内存地址,3和4是两个对象,string应该用.equals()比较内容是否一样。
回复 使用道具 举报
caotierong 发表于 2015-4-22 22:58
字符串相加当有变量参与时,其实它会做一个操作,在堆内存中new一个对象,所以它的地址值和常量池中的不一 ...

String str4=str1+str2;相当于在内存中new一个新对象,而str3="JavaEE"+"Android";还是指向常量池的对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马