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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏亮 中级黑马   /  2012-11-8 08:30  /  2327 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test
{
        public static void main(String[] args)
        {
                Double d1 = 11.0;
                Double d2 = 11.0;
                System.out.println("double="+(d1==d2));
               
                Float f1 = 11.0f;
                Float f2 = 11.0f;
                System.out.println("float+"+(f1==f2));
                //结果是false
                //难道double 和float 没有享元??

        }




}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
虽然不清楚什么是享元。但是肯定告诉你。基本数据类型分配在栈内。一个变量一个地。呵呵。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
  原因:你用Double和Float是在用基本数据类型包装类创建对象,会在堆内存中开辟不同的空间。
     对象内容的比较用equals方法,而不是==方法。
  解决:定义成基本数据类型
     float f1 = 11.0f;

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
享元设计模式:是指有很多个小的对象,他们有很多属性相同,把他们变成一个对象,那些相同的属性叫做内部状态,不相同的属性作为方法的参数,成为外部状态。
范围:-128到127之间
目的:为了共享技术实现相同或相似对象的重用
何时用:当对象数量太多时,将导致运行代价过高,带来性能下降的时候用
缺点:1.需要分离出内部状态和外部状态,使得程序的逻辑复杂化。
      2.需要将享元对象的状态外部化,而读取外部状态舍得运行时间变长

使用享元设计模式的类有:String,

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 很给力!

查看全部评分

回复 使用道具 举报
使用享元设计模式的类有:String,Integer,别的就不是太清楚,像Double,Float好像不可以实现

点评

要自信点嘛,是肯定不是好像。  发表于 2012-11-8 10:16
回复 使用道具 举报
JDK5.0新特性--自动装箱:基本类型与包装类型的转换
JDK5.0之后的书写:Double d = 10.5d;
JDK1.4的书写:Double d = new Double(10.5);
两个新对==结果肯定是false
回复 使用道具 举报
魏亮 中级黑马 2012-11-10 16:07:27
7#
梁桐老师 发表于 2012-11-8 11:17
JDK5.0新特性--自动装箱:基本类型与包装类型的转换
JDK5.0之后的书写:Double d = 10.5d;
JDK1.4的书写:D ...

那这个类运行的结果是true
class  Test
{
        public static void main(String[] args)
        {
                Integer i1 = 12;
                Integer i2 =12;
                System.out.println(i1==i2);
        }
}
i1和i2 也是两个新对象
总结一下,是不是double 和float 不支持享元呢?
回复 使用道具 举报
魏亮 中级黑马 2012-11-10 16:07:33
8#
梁桐老师 发表于 2012-11-8 11:17
JDK5.0新特性--自动装箱:基本类型与包装类型的转换
JDK5.0之后的书写:Double d = 10.5d;
JDK1.4的书写:D ...

那这个类运行的结果是true
class  Test
{
        public static void main(String[] args)
        {
                Integer i1 = 12;
                Integer i2 =12;
                System.out.println(i1==i2);
        }
}
i1和i2 也是两个新对象
总结一下,是不是double 和float 不支持享元呢?
回复 使用道具 举报
魏亮 发表于 2012-11-10 16:07
那这个类运行的结果是true
class  Test
{

Integer类型缓存了-128~~127这个范围的数字
  1. //实例
  2.                 Integer i1 = -129;
  3.                 Integer j1 = -129;
  4.                 System.out.println("Integer1 " + (i1 == j1));
  5.                
  6.                 Integer i2 = -128;
  7.                 Integer j2 = -128;
  8.                 System.out.println("Integer2 " + (i2 == j2));
  9.                
  10.                 Integer i3 = 127;
  11.                 Integer j3 = 127;
  12.                 System.out.println("Integer3 " + (i3 == j3));
  13.                
  14.                 Integer i4 = 128;
  15.                 Integer j4 = 128;
  16.                 System.out.println("Integer4 " + (i4 == j4));
  17. //结果
  18. Integer1 false
  19. Integer2 true
  20. Integer3 true
  21. Integer4 false
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马