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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夕默 中级黑马   /  2014-10-17 12:57  /  1053 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基础学习视频152集,String。有如下代码:
  1. String s1="abc";
  2. String s2=new String("abc");
复制代码
并有如下几点小结:
        1、“abc”是一个对象(s1是一个类类型变量);
        2、常量,不能被改变。
        3、s1内存中有一个对象,s2在内存中有两个对象。
        4、String类复写了Object类中equals方法,该方法用于判断字符串是否相同。
以下是我的理解:
        1、常量池中有个“abc”,并且是不能被改变的。
        2、对象存放于内存中,内存中有一个s1的对象,s2由于调用构造函数时传递参数多了一个对象。
        3、equals方法判断字符串是否相同都是判断的常量池中的"abc",所以s1与s2相等。==判断的是怎么进行的呢?
  1. String s1="abc";
  2. String s2= new String("abc");
  3. String s3="abc";
复制代码
       为什么s1==s2返回false,s1==s3返回true。
希望大神从内存存储方面(栈、堆神马的)帮忙解释。最好画个栈、堆、内存神马的图。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
==就是判断是否是同一个对象,比较的是他们的地址。而equals比较的对象的内容。如果楼主明白了s1是一个对象,s2是两个对象,就好理解了。
回复 使用道具 举报
补充。个人理解

无标题.png (70.04 KB, 下载次数: 9)

无标题.png

点评

S2 对象的地址忘赋值进去了  发表于 2014-10-17 13:18
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马