黑马程序员技术交流社区
标题:
单例模式中懒汉式的一个细节问题
[打印本页]
作者:
刘云龙
时间:
2013-3-7 23:52
标题:
单例模式中懒汉式的一个细节问题
class Single
{
//懒汉式
private Single(){}
private static Single s; //= null;这里写上= null和不写,区别大吗?
public static Single getInstance()
{
if (s == null)
{
s = new Single();
}
return s;
}
}
复制代码
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