guang19

Results 10 comments of guang19

我觉得这个得分情况而定,c和c++就是很好的例子,两种语言执行效率差距其实并不大,但是两种语言的设计思想就不同。

老哥可能还是没明白我说的意思,老哥之见:懒汉式在类加载阶段不会初始化单例。敢问一句,难道饿汉式会在类加载阶段初始化单例吗?当然不会。 我上面说了那么多,其实总结一句话就是: 懒汉式和饿汉式的单例都只会在遇到new,putstatic,getstatic等指令时初始化单例。 ```` //eager属性只在类初始化时才会被初始化 private static final Eager eager = new Eager(); ```` ![image](https://user-images.githubusercontent.com/41150022/76047001-6d35ca00-5f9c-11ea-8109-cd7f05ed65a3.png) 以上。

我提出这个issue的本意是希望各位同学不要盲目随大流,忽略单例模式类加载和初始化的时机。 懒汉式较饿汉式实现复杂,充其量当个面试题吧。。。 还不如饿汉式实现简单。

@jinyahuan 请先弄明白加载和初始化的区别,准备阶段是为static字段初始化零值(0,0L,null),初始化阶段才是赋值(执行new Eager()),而第一次调用的时候才会初始化。在我看来,你的说法与网上大部分传闻的说法没啥区别。。

@jinyahuan 你说的解析是将常量池中的符号引用解析为直接引用。 这是 懒汉式反编译后的常量池: ![image](https://user-images.githubusercontent.com/41150022/76056293-2f8f6c00-5fb1-11ea-9d69-ea5de97f707d.png) 这是饿汉式反编译后的常量池: ![image](https://user-images.githubusercontent.com/41150022/76055662-3b7a2e80-5faf-11ea-91f5-5cd2096dd3fd.png) 你只看到了lazy 和 eager是常量,有符号引用,但并没有看到它们的值。 ```` 因为 private static final Eager eager = new Eager(); 不同于 private static final String s = "abc"; ```` s...

我的意思说的很清楚:懒汉式和饿汉式普通使用(不使用其它加载或获取单例的手段)没区别,并且是在1楼就说清楚了。 言尽于此吧,我想我已经说的够清楚了,无需再争论下去了。

哪里,与您相比,我还需要更加努力。