Subham619 Ответов: 2

Почему я получаю два значения a1?


class A
 {  
    private static A a1;
	private A(){}
	public static A createA(){
		if(a1==null)
      {
		a1 = new A();
      }
	System.out.println("hashcode of a1 ="+a1.hashCode());
	return a1 ;
}
class B {
	public void m1()
        {
		    A a2 = A.createA();
		    **strong text**System.out.println("hashcode of a2 ="+a2.hashCode());
		}
}
public class Singleton {
	public static void main(String[] args) {
		A.createA();
		B b=new B();
		b.m1();
	}
}


Что я уже пробовал:

Я пробовал компилировать в разных компиляторах, но результат был один и тот же.

2 Ответов

Рейтинг:
6

Jochen Arndt

Потому что A.createA() вызывается дважды:


  1. При вызове его main
  2. При звонке b.m1() in <code>main


Рейтинг:
20

Richard MacCutchan

Во-первых A.createA печатает детали a1. Тогда ваш B.m1 вызов метода A.createA который печатает детали во второй раз.


Subham619

Боже.какой же я тупой!!
Спасибо за ответ.