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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李建锋 黑马帝   /  2012-2-16 23:08  /  1957 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李建锋 于 2012-2-17 15:17 编辑

package mapdemo;

public class EqualsDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
               
                String m1="I hate you ";
       
                String m2="I hate you ";
               
               
                System.out.println(m1.equals(m2));
               
                System.out.println(m1==m2);

        }
       

}
为什么第一个和第二个都是TRUE????

评分

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

查看全部评分

5 个回复

倒序浏览
String m1="I hate you "; //这一句是表示创建了两个对象 一个是"I hate you ",另外一个是对 "I hate you "的引用 m1
String m2="I hate you "; //这句话是又创建了一个对"I hate you "的引用m2

他们引用的是同一对象 所以字节码相同,实际上你创建了3个对象

评分

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

查看全部评分

回复 使用道具 举报
那这算不算是享元设计模式呢?
回复 使用道具 举报
是享元{:soso_e149:}
回复 使用道具 举报
当你创建了m1后,你创建m2,它会去内存中查找是否存在内容一样的字符串对象,有就使用,没得话就创建。用new的方式又不一样。这是String类比较特别的地方。你好好看看老毕的视频吧
回复 使用道具 举报
String m1="I hate you ";//同时创建了两个对象 一个是"I hate you ",另外一个是对 "I hate you "的引用 m1
        
String m2="I hate you ";//创建了一个对"I hate you "的引用m2
                     
System.out.println(m1.equals(m2));//比较的是m1与m2两个对象的引用,其内存地址相同,自然结果为true
               
System.out.println(m1==m2);//其值都为"I hate you",所以结果也为true.
两种比较的含义不同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马