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

© 阿牛 中级黑马   /  2012-4-4 21:46  /  1849 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请看下面代码:
public class flyWeight {
        public static void main(String [] args){
                Integer i1=3;
                Integer i2=3;
                Integer i3=new Integer(3);
                Integer i4=new Integer(3);
                System.out.println(i1==i2);// true
                System.out.println(i3==i4);//false
                System.out.println(i1==i3);//false
        }

}
本来以为他们都应该是true的,但却不是,原因何在?

2 个回复

倒序浏览
         Integer i3=new Integer(3);
                Integer i4=new Integer(3);
new 就相当于创建了一个对象 这个与字符串有相同处也有不同处


自动装箱和享元设计模式(代码)
public class AutoBox {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Integer aobj = new Integer(3); // 早起的写法,
                Integer iobj = 3; // 自动装箱,1.5的新特性
                System.out.println(iobj + 7); // 自动拆箱

                String name1 = new String("aaa");
                String name2 = new String("aaa");
                System.out.println(name1 == name2); // flase ,每个引用都有一个new,所以地址值不同

                Integer a = 10;
                Integer b = 10;
                System.out.println(a == b); // true

                Integer a1 = 135;
                Integer b1 = 135;
                System.out.println(a1 == b1); // flase

//                 为什么结果不相同那???????????????
               
               
//                对于基本数据类型的整数要装箱成基本数据类型的整数,数字在一个字节之内 -128--127 之间(因为他们的使用频率高)
//                一旦被包装成Integer对象就被缓存起来,当下次用的时候先看缓存中有没有,有就拿出来用,节省内存空间
//                这样就可以成为一种设计模式,享元设计模式
//                例:在word文档中,每一个字母都有一个字符,有很多重复的字母,这样我们就可以定义26个字符就可以了
//                        sdfqqqs...s和s的区别就是 位置不同,s有个显示的方法 ,s.display(int x, int y)
//                       
//                        享元设计模式的定义
//                        如果有很多很小的对象,他们有很多相同的点,那么久可以把他们变成一个对象,
//                        不同的东西变成外部的属性,作为方法的参数传入

                Integer num1 = Integer.valueOf(3); // 返回一个表示指定的 int 值的 Integer 实例。
                Integer num2 = Integer.valueOf(3);
                System.out.println(num1 == num2);

        }
}
回复 使用道具 举报
                  System.out.println(i3==i4);//false//==比较的是两个变量中的内容,你这是比较的2个对象肯定false,用equals就是true了
                 System.out.println(i1==i3);//false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马