Skip to content

Instantly share code, notes, and snippets.

@MaksimDmitriev
Created September 10, 2016 10:29
Show Gist options
  • Save MaksimDmitriev/f76c4fe374d6332d574e2b4fe8a26a25 to your computer and use it in GitHub Desktop.
Save MaksimDmitriev/f76c4fe374d6332d574e2b4fe8a26a25 to your computer and use it in GitHub Desktop.
PublicInstance Singleton in Java. Why is it not a lazy initialization?
package mian;
import sample.PublicInstance;
public class Main {
public static void main(String[] args) {
System.out.println(PublicInstance.STRING);
}
}
PublicInstance() from 1
Lorem
// when STRING is final
Lorem
See? The PublicInstance() constructor wasn't called.
final matters :)
package sample;
public class PublicInstance {
public static String STRING = "Lorem";
public static final PublicInstance INSTANCE = new PublicInstance();
private PublicInstance() {
System.out.println("PublicInstance() from " + Thread.currentThread().getId());
}
}
@MaksimDmitriev
Copy link
Author

Hmm.. But with public static String STRING = new String("Lorem"); PublicInstance() will be called.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment