黑马程序员技术交流社区

标题: 求助一道基础题 [打印本页]

作者: wx_Zdt18Ww6    时间: 2016-4-25 11:26
标题: 求助一道基础题
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了吗?
       }

}



作者: zhoubinjian    时间: 2016-4-25 12:19
S1已经 赋值过了,它的值  是Singleton.s;当S赋值为null时,对他不影响,
作者: 小红花    时间: 2016-4-25 13:38
首先是将singleton.s赋值给singleton s1,然后null的值赋值给singleton s2,这时候singleton s2的值是null,因为singleton.s不等于null,所以是false
作者: BackGaoz    时间: 2016-4-25 14:24
程序从上往下走,就比如你定义一个x = 10,
然后a = x;
x = 0;
y = x;
最后a == y?肯定不一样
作者: xiaoxiqq    时间: 2016-4-25 16:05
反问,能用==号比较吗?
作者: 小K哥    时间: 2016-4-25 19:21
s1肯定不是null啦,你明明把一个对象的引用赋给它,它是一个地址值。s2才是null.
作者: liuqjss    时间: 2016-4-25 20:49
地址值不同flase
作者: wx_Zdt18Ww6    时间: 2016-4-26 07:23
小红花 发表于 2016-4-25 13:38
首先是将singleton.s赋值给singleton s1,然后null的值赋值给singleton s2,这时候singleton s2的值是null, ...

可是singleton.s是静态的啊,不是应该所有对象共享吗,将它赋值为null时,singleton s1不应该也改为null了吗

作者: wx_Zdt18Ww6    时间: 2016-4-26 07:24
BackGaoz 发表于 2016-4-25 14:24
程序从上往下走,就比如你定义一个x = 10,
然后a = x;
x = 0;

可是singleton.s是静态的啊,不是应该所有对象共享吗,将它赋值为null时,singleton s1不应该也改为null了吗
作者: 九天玄妖    时间: 2016-4-26 14:56
第一次看这个的时候,我也晕了
作者: 18573626921    时间: 2016-4-26 19:54
S1赋值之后不会改变
作者: zhoutianxing    时间: 2016-4-26 21:17
C:\Users\zhout\OneDrive\Desktop\捕获.jpg
作者: 冰刃    时间: 2016-4-26 22:13
这题好复杂,晕了
作者: 320215787    时间: 2016-4-26 22:47
不能用==比较吧




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