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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wx_Zdt18Ww6 中级黑马   /  2016-4-25 11:26  /  1167 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Singleton{     private Singleton(){}
     public static Singleton s = new Singleton();
}


class Test{
      public static void main(String [] args){
         Singleton s1 = Singleton.s;
         Singleton.s = null;
         Singleton s2 = Singleton.s;
         System.out.println(s1==s2);   // 为什么是false 呢,s是静态变量,把它赋值为null;s1不应该也改为null了吗?
       }

}


13 个回复

倒序浏览
S1已经 赋值过了,它的值  是Singleton.s;当S赋值为null时,对他不影响,
回复 使用道具 举报
首先是将singleton.s赋值给singleton s1,然后null的值赋值给singleton s2,这时候singleton s2的值是null,因为singleton.s不等于null,所以是false
回复 使用道具 举报
程序从上往下走,就比如你定义一个x = 10,
然后a = x;
x = 0;
y = x;
最后a == y?肯定不一样
回复 使用道具 举报
反问,能用==号比较吗?
回复 使用道具 举报
s1肯定不是null啦,你明明把一个对象的引用赋给它,它是一个地址值。s2才是null.
回复 使用道具 举报
地址值不同flase
回复 使用道具 举报
小红花 发表于 2016-4-25 13:38
首先是将singleton.s赋值给singleton s1,然后null的值赋值给singleton s2,这时候singleton s2的值是null, ...

可是singleton.s是静态的啊,不是应该所有对象共享吗,将它赋值为null时,singleton s1不应该也改为null了吗
回复 使用道具 举报
BackGaoz 发表于 2016-4-25 14:24
程序从上往下走,就比如你定义一个x = 10,
然后a = x;
x = 0;

可是singleton.s是静态的啊,不是应该所有对象共享吗,将它赋值为null时,singleton s1不应该也改为null了吗
回复 使用道具 举报
第一次看这个的时候,我也晕了
回复 使用道具 举报
S1赋值之后不会改变
回复 使用道具 举报
C:\Users\zhout\OneDrive\Desktop\捕获.jpg
回复 使用道具 举报
这题好复杂,晕了
回复 使用道具 举报
不能用==比较吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马