黑马程序员技术交流社区

标题: 关于String的几个小疑问 [打印本页]

作者: 夕默    时间: 2014-10-17 12:57
标题: 关于String的几个小疑问
基础学习视频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。
希望大神从内存存储方面(栈、堆神马的)帮忙解释。最好画个栈、堆、内存神马的图。


作者: 森屿北巷    时间: 2014-10-17 13:09
==就是判断是否是同一个对象,比较的是他们的地址。而equals比较的对象的内容。如果楼主明白了s1是一个对象,s2是两个对象,就好理解了。
作者: 森屿北巷    时间: 2014-10-17 13:16
补充。个人理解

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

无标题.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2