黑马程序员技术交流社区

标题: 求原因 [打印本页]

作者: 李建锋    时间: 2012-2-16 23:08
标题: 求原因
本帖最后由 李建锋 于 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????
作者: 丁晓宇    时间: 2012-2-16 23:11
String m1="I hate you "; //这一句是表示创建了两个对象 一个是"I hate you ",另外一个是对 "I hate you "的引用 m1
String m2="I hate you "; //这句话是又创建了一个对"I hate you "的引用m2

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

作者: 李建锋    时间: 2012-2-16 23:14
那这算不算是享元设计模式呢?
作者: 丁晓宇    时间: 2012-2-16 23:18
是享元{:soso_e149:}
作者: 黄锦成    时间: 2012-2-17 09:43
当你创建了m1后,你创建m2,它会去内存中查找是否存在内容一样的字符串对象,有就使用,没得话就创建。用new的方式又不一样。这是String类比较特别的地方。你好好看看老毕的视频吧
作者: 王康    时间: 2012-2-17 10:09
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.
两种比较的含义不同





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