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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘云龙 中级黑马   /  2013-3-7 23:52  /  1899 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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和不写,区别大吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

13 个回复

倒序浏览
貌似没区别,虚拟机默认为null
回复 使用道具 举报
没有区别的 。都是没有指向,在jvm中默认就是null
回复 使用道具 举报
这个 得看你怎么引用了..  你可以试着写一个int i ; 然后在方法里把这个i 拿去计算.. 这时候就会提示你 需要初始化值
回复 使用道具 举报
private static Single s; //= null;这里写上= null和不写,区别大吗?  没区别,默认也是null
回复 使用道具 举报
对于引用类型变量,系统默认初始化都是null;
private static Single s;这里创建一个静态的变量,存储在方法区内。在类加载的时候就是默认初始化为null了
回复 使用道具 举报
默认就是null了,分什么区别!
要说唯一的区别,就是你多敲了几个代码
回复 使用道具 举报
没有区别。
因为本身系统默认字节类型的变量就是null
回复 使用道具 举报
没有区别的,默认就是null。
回复 使用道具 举报
引用类型的默认问nulll
回复 使用道具 举报
我个人认为是有区别的,如果没区别的话,那么下面为什么还有判断呢?如果上面s = null了,就不需要判断了。另外你如果你在这写上Single s = null的话,那么比如说有A、B、C三个变量都需要用s,那么一进来就直接是null,本来A进来的时候是null,不赋值后是一个对象,那么B进来了,s又重新为null,那么B也指向一个对象,你觉得这样还是对象的唯一性吗?个人愚见,不知对否,仅供参考
回复 使用道具 举报
黄玉昆 发表于 2013-3-9 08:57
我个人认为是有区别的,如果没区别的话,那么下面为什么还有判断呢?如果上面s = null了,就不需要判断了。 ...

你说的"如果上面s = null了,就不需要判断了。"这里,判断s是否等于null不能不判断,这里判断的是s的值是不是第一次被使用,也就是s是不是第一次建立对象,如果没有这个判断,则每次调用getInstance()函数,都会建立一个对象,并且对象的地址是不同的,就不能实现单例模式.
回复 使用道具 举报
没区别,jvm默认null
回复 使用道具 举报
private static Single s是在方法区内存定义了一个类类型的静态变量S,在堆内存或者方法区没有给定义的变量初始化值的时候,就有一个默认值。如int类型默认值为0,String类型默认值是空,而类类型的默认值是null。
根据这个,你不用写null,虚拟机也会给他初始化默认值的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马