guang19
guang19
@ryouaki 感谢,学习了
我觉得这个得分情况而定,c和c++就是很好的例子,两种语言执行效率差距其实并不大,但是两种语言的设计思想就不同。
老哥可能还是没明白我说的意思,老哥之见:懒汉式在类加载阶段不会初始化单例。敢问一句,难道饿汉式会在类加载阶段初始化单例吗?当然不会。 我上面说了那么多,其实总结一句话就是: 懒汉式和饿汉式的单例都只会在遇到new,putstatic,getstatic等指令时初始化单例。 ```` //eager属性只在类初始化时才会被初始化 private static final Eager eager = new Eager(); ````  以上。
我提出这个issue的本意是希望各位同学不要盲目随大流,忽略单例模式类加载和初始化的时机。 懒汉式较饿汉式实现复杂,充其量当个面试题吧。。。 还不如饿汉式实现简单。
@jinyahuan 请先弄明白加载和初始化的区别,准备阶段是为static字段初始化零值(0,0L,null),初始化阶段才是赋值(执行new Eager()),而第一次调用的时候才会初始化。在我看来,你的说法与网上大部分传闻的说法没啥区别。。
@jinyahuan 你说的解析是将常量池中的符号引用解析为直接引用。 这是 懒汉式反编译后的常量池:  这是饿汉式反编译后的常量池:  你只看到了lazy 和 eager是常量,有符号引用,但并没有看到它们的值。 ```` 因为 private static final Eager eager = new Eager(); 不同于 private static final String s = "abc"; ```` s...
我的意思说的很清楚:懒汉式和饿汉式普通使用(不使用其它加载或获取单例的手段)没区别,并且是在1楼就说清楚了。 言尽于此吧,我想我已经说的够清楚了,无需再争论下去了。
哪里,与您相比,我还需要更加努力。