黑马程序员技术交流社区

标题: 单例模式中懒汉式的一个细节问题 [打印本页]

作者: 刘云龙    时间: 2013-3-7 23:52
标题: 单例模式中懒汉式的一个细节问题
  1. class Single
  2. {
  3. //懒汉式
  4. private Single(){}
  5. private static Single s; //= null;这里写上= null和不写,区别大吗?
  6. public static Single getInstance()
  7. {
  8.   if (s == null)
  9.   {
  10.    s = new Single();
  11.   }
  12.   return s;
  13. }
  14. }
复制代码
private static Single s; //= null;这里写上= null和不写,区别大吗?

作者: HM王琦    时间: 2013-3-8 00:00
貌似没区别,虚拟机默认为null
作者: 高梦晓    时间: 2013-3-8 00:02
没有区别的 。都是没有指向,在jvm中默认就是null
作者: 张云杰    时间: 2013-3-8 00:04
这个 得看你怎么引用了..  你可以试着写一个int i ; 然后在方法里把这个i 拿去计算.. 这时候就会提示你 需要初始化值
作者: 张卫刚    时间: 2013-3-8 00:07
private static Single s; //= null;这里写上= null和不写,区别大吗?  没区别,默认也是null
作者: 黑马朱超    时间: 2013-3-8 00:14
对于引用类型变量,系统默认初始化都是null;
private static Single s;这里创建一个静态的变量,存储在方法区内。在类加载的时候就是默认初始化为null了
作者: 江华    时间: 2013-3-8 00:16
默认就是null了,分什么区别!
要说唯一的区别,就是你多敲了几个代码
作者: 陈宇鹏    时间: 2013-3-8 18:26
没有区别。
因为本身系统默认字节类型的变量就是null
作者: 郑元皓    时间: 2013-3-8 18:41
没有区别的,默认就是null。
作者: 黑马17期-闫东东    时间: 2013-3-8 20:57
引用类型的默认问nulll
作者: 黄玉昆    时间: 2013-3-9 08:57
我个人认为是有区别的,如果没区别的话,那么下面为什么还有判断呢?如果上面s = null了,就不需要判断了。另外你如果你在这写上Single s = null的话,那么比如说有A、B、C三个变量都需要用s,那么一进来就直接是null,本来A进来的时候是null,不赋值后是一个对象,那么B进来了,s又重新为null,那么B也指向一个对象,你觉得这样还是对象的唯一性吗?个人愚见,不知对否,仅供参考
作者: 刘云龙    时间: 2013-3-9 21:42
黄玉昆 发表于 2013-3-9 08:57
我个人认为是有区别的,如果没区别的话,那么下面为什么还有判断呢?如果上面s = null了,就不需要判断了。 ...

你说的"如果上面s = null了,就不需要判断了。"这里,判断s是否等于null不能不判断,这里判断的是s的值是不是第一次被使用,也就是s是不是第一次建立对象,如果没有这个判断,则每次调用getInstance()函数,都会建立一个对象,并且对象的地址是不同的,就不能实现单例模式.
作者: 刘松老师    时间: 2013-3-9 21:47
没区别,jvm默认null
作者: HM张勇    时间: 2013-3-10 12:05
private static Single s是在方法区内存定义了一个类类型的静态变量S,在堆内存或者方法区没有给定义的变量初始化值的时候,就有一个默认值。如int类型默认值为0,String类型默认值是空,而类类型的默认值是null。
根据这个,你不用写null,虚拟机也会给他初始化默认值的。




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