黑马程序员技术交流社区

标题: 关于单例模式中的一个疑问,无法解释!!! [打印本页]

作者: XiaoS    时间: 2014-1-5 23:56
标题: 关于单例模式中的一个疑问,无法解释!!!
本帖最后由 XiaoS 于 2014-1-6 07:50 编辑
  1. class DemoSingle {
  2. public static void main (String[] args){
  3. Single s1 = Single.s;
  4. System.out.println("s1 = "+s1);
  5. }
  6. }

  7. //定义Single类
  8. class Single {

  9. //私有化构造函数
  10. private Single(){}

  11. //创建一个本类对象
  12. static Single s = new Single();
  13. }
复制代码

我把上面的代码改成下面的话,输出结果就变成了:Single@36db4bcf为什么呢?难道不一样吗,区别在哪里呢?

  1. class DemoSingle {
  2. public static void main (String[] args){
  3. System.out.println(Single.s);
  4. }
  5. }

  6. //定义Single类
  7. class Single {

  8. //私有化构造函数
  9. private Single(){}

  10. //创建一个本类对象
  11. static Single s = new Single();
  12. }
复制代码



作者: 张洪慊    时间: 2014-1-6 00:19
我猜测你可能是第一段编译运行
然后修改为第二段代码在编译运行
注意启动了两次JVM,那么每次给对象在堆内存中分配的地址可能不同

Single@36db4bcf: @后面是由内存地址换算的哈希值
那么你可以对第一段程序多运行几次,你会发现该值可能发生改变.
作者: XiaoS    时间: 2014-1-6 00:46
张洪慊 发表于 2014-1-6 00:19
我猜测你可能是第一段编译运行
然后修改为第二段代码在编译运行
注意启动了两次JVM,那么每次给对象在堆内存 ...

谢谢,是编译的问题!
作者: 黄晓鑫    时间: 2014-1-6 05:56
完全一样




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