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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 821728010 中级黑马   /  2013-5-26 23:16  /  1864 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 821728010 于 2013-5-29 17:35 编辑

public class Demo14 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
                String s1="haha";
                String s2="haha";
                String s3=new String("haha");
               
                System.out.println(s1==s2);
                System.out.println(s1==s3);
               
        }

}
代码的输出结果是:

true
false
String对象引用变量 s1和s2怎么指向同一个对象?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
其实String s1="haha";这个对象“haha”是放在了常量池中的,
当执行 String s2 = "haha"时,先去常量池中找是否有该对象
如果有,则直接共享,即s2也指向该对象。
这样s2,s1就指向了同一个对象了。
               

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-5-26 23:23:32
藤椅
常量池的问题。已经有了.就直接指向了。好好看基础视频啊哥们。
回复 使用道具 举报
s1==s2 是因为他们两个的引用同一个内存地址,栈不同堆内存值相同。而s3是用new String()实例化的,是在内存中又开辟了一个新的地址存haha的。  所以s1与s3的比较为false

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
String s1="haha"; String s2="haha"; 都在内存的常量池里面,比较的是,但第一"haha"在常量池里存在是,等第二"haha",不会再创建一个"haha",而是把第一个“haha”的地址给了s2,而s1和s2比较其实就是比较在常量池的地址值,地址值都是同一个,当然是true;但是假如跟s3比较,是拿s3在堆内存的地址值跟s1或s2比较,地址值肯定不一样,所以为False.

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  java程序运行的时候从main方法开始加载代码块,其中整个内存空间可以被分为,变量区【堆区】,代码区,栈区。你前面的两个String 初始化后其实就是一个String的常量,存放在变量区中,这样两个String对象的引用就指向了同一个常量的引用,但是如果你是实例化一个对象,那么它必须从新分配一个内存地址,这就好比,你如果拿出两个苹果,标上1号2号,他还是同一个苹果,但是你实例化一个苹果,它就可能不是指向同一个苹果了。
这是我个人的理解,你仔细看一下毕老师的视频吧。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
自己画的内存图,绝对强悍,肯定能懂

QQ图片20130529074644.jpg (80.16 KB, 下载次数: 0)

String内存图

String内存图

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
强悍!!!
回复 使用道具 举报
当String s1="haha"时,haha就已经被放入常量池,String s2也是一个常量,直接寻找haha的地址就可以,而s3是new一个String对象,所以需要另外分配内存地址

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马