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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤姆纳斯 高级黑马   /  2014-6-12 16:34  /  1607 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤姆纳斯 于 2014-6-12 20:54 编辑

class Single
{
        private static Single s=null;
        private Single(){}
        public static Single getInstance()
        {
                if (s==null)
                s= new Single();
                return s;
        }
}
if后面是什么意思?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

9 个回复

倒序浏览
s== null ,就是表示s没有指向Single类实例的引用,也就是表明还没有new一个Single类的实例,那么就创建一个,并返回。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
用我的理解就是,思想就是不调用时不初始化,一旦调用时再初始化。所以,if后面是给s初始化呢,new一个对象。因为一开始s为空,if后在实例化。
回复 使用道具 举报
这就是懒汉式的独特的地方,if是判断s的   ,如果s为空就执行下面的语句,生成一个对象,当然,懒汉式都为空,且都会生成对象,要不然就没有意义了。饿汉式就不会判断了,运行时就直接给你在堆内存里分配各空间。
回复 使用道具 举报
任何类型的变量都有对应的默认的初始化值,好比int初始化值为0,String初始化值为null。你这个s 是你定义的person类型的变量,相当于C中的指针类型的变量。所以他初始化值为null. 意思是这个s没有任何内容
回复 使用道具 举报
就是很懒,不想先初始化,非得有人叫他他才初始化。
回复 使用道具 举报
为了保证内存中只有一个Single对象才用if语句判断,如果内存中没有即为null,那么创建一个,如果内存中有Single对象,那么就用内存中的
回复 使用道具 举报
楼主真是标准的懒汉,if(s==null){}就说明没有指向的内存地址,你就给他指向一个不就完了嘛
回复 使用道具 举报
想了想,懂了。
回复 使用道具 举报
alive 中级黑马 2014-6-12 22:18:48
10#
就是到用的时候,才判断有没有Single类的对象,没有的话就创建一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马