private static void CachedAndSameValue()
{
System.out.println("CachedAndSameValue: \n");
Integer a = 2;
System.out.println(a);
Integer b = 2;
System.out.println(b);
// This prints "equal" because 'a' and 'b' are stored in the same Integer instance, and "==" is comparing the references
if(a == b)
{
System.out.println("equal");
}
else
{
System.out.println("not equal");
}
}
private static void CachedAndDifferentValue()
{
System.out.println("CachedAndDifferentValue: \n");
Integer a = 2;
System.out.println(a);
Integer b = 3;
System.out.println(b);
// This prings "not equal" - but shouldn't it also print "equal" for the same reason above?
if(a == b)
{
System.out.println("equal");
}
else
{
System.out.println("not equal");
}
}
ICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQ2FjaGVkQW5kU2FtZVZhbHVlKCkKCXsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhY2hlZEFuZFNhbWVWYWx1ZTogXG4iKTsKCQlJbnRlZ2VyIGEgPSAyOwoJCVN5c3RlbS5vdXQucHJpbnRsbihhKTsKCQkKCQlJbnRlZ2VyIGIgPSAyOwoJCVN5c3RlbS5vdXQucHJpbnRsbihiKTsKCQkKCQkvLyBUaGlzIHByaW50cyAiZXF1YWwiIGJlY2F1c2UgJ2EnIGFuZCAnYicgYXJlIHN0b3JlZCBpbiB0aGUgc2FtZSBJbnRlZ2VyIGluc3RhbmNlLCBhbmQgIj09IiBpcyBjb21wYXJpbmcgdGhlIHJlZmVyZW5jZXMgCgkJaWYoYSA9PSBiKQoJCXsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbCIpOwoJCX0KCQllbHNlCgkJewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5vdCBlcXVhbCIpOwoJCX0KCX0KCQoJcHJpdmF0ZSBzdGF0aWMgdm9pZCBDYWNoZWRBbmREaWZmZXJlbnRWYWx1ZSgpCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKCJDYWNoZWRBbmREaWZmZXJlbnRWYWx1ZTogXG4iKTsKCQlJbnRlZ2VyIGEgPSAyOwoJCVN5c3RlbS5vdXQucHJpbnRsbihhKTsKCQkKCQlJbnRlZ2VyIGIgPSAzOwoJCVN5c3RlbS5vdXQucHJpbnRsbihiKTsKCQkKCQkvLyBUaGlzIHByaW5ncyAibm90IGVxdWFsIiAtIGJ1dCBzaG91bGRuJ3QgaXQgYWxzbyBwcmludCAiZXF1YWwiIGZvciB0aGUgc2FtZSByZWFzb24gYWJvdmU/CgkJaWYoYSA9PSBiKQoJCXsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbCIpOwoJCX0KCQllbHNlCgkJewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5vdCBlcXVhbCIpOwoJCX0KCX0=