2013-08-23 2 views
5

GUI 프로그램을 개발 중입니다. 여기서는 기능별로 ActionListeners 클래스를 만들었습니다. 내 질문에 JVM이 jButtons 처리하는 방법에 관한, 동일한 ActionListener가 추가되었습니다.메모리의 동일한 객체를 가리키는 Java, 참조 변수

우선; JVM이 동일한 문자열 (예를 들어)을 가리키는 두 개의 참조 변수가 메모리의 동일한 문자열 객체를 가리킴으로써 메모리를 절약 할 수 있다는 것을 알고 있습니다.

public class Example { 
    String str1 = "SomeString"; 
    String str2 = "SomeString"; 
} 

자, 이제 제 질문은 5 가지 jButton이 있습니다. 모든 버튼에는 동일한 ActionListener가 추가됩니다. 프로그램을 실행하면 동일한 클래스의 5 개의 별개의 똑같은 instaces가 추가됩니까? 아니면 JVM이 비슷한 것을 할 것인가? 사전에

  • 감사합니다 :)
+0

우리가하는 일을 보여 주면 어떤 일이 일어날 지 알려줄 수 있습니다. 또는 스스로 테스트 해 볼 수 있습니다. 귀하의 질문에 혼란스러워합니다 - 동일한 ActionListener 개체를 다섯 개의 다른 단추로 전달하면 왜 그것이 다섯 개의 개체로 분할 될 것이라고 생각하십니까? –

+0

답변 해 주셔서 감사합니다. 나의 예에서 나는 의미했다. 5 개의 서로 다른 버튼에 5 개의 다른 객체를 명시 적으로 추가하면 JVM이 메모리 공간을 최적화하고 동일한 객체를 공유하게합니다. –

+0

이 경우, 아니오. JVM은 그런 객체를 병합하지 않습니다. 문자열은 특별한 경우입니다. 그러나 여러 개의 버튼에 대해 동일한 ActionListener를 사용할 수 있습니다. –

답변

4

글쎄, 실제로 작성한 방법은 ActionListeners에 달려 있습니다. 첫 번째 경우

button1.addActionListener(new ActionListener() { 
    .... 
}); 
.... 
button5.addActionListener(new ActionListener() { 
    .... 
}); 

또는

ActionListener al= new ActionListener() { 
    .... 
}; 
button1.addActionListener(al); 
.... 
button5.addActionListener(al); 

을 한 경우는 5 가지 액션 청취자를 사실 수 있습니다. 그러나 두 번째에는 오직 하나만 있습니다. 언제 단 하나만 가질 수 있습니까? 그것이 정확히 동일하고 동일한 대상에있을 때.

+0

첫 번째 개체는 별도 개체이고 두 번째 개체는 동일한 개체일까요? – shieldgenerator7

+0

답변 해 주셔서 감사합니다. 나는 첫 번째 예에서 언급 한 것을 해왔다. 이제 마지막 예를 언급 했으니, 놀랐다. 하지만 내 질문에 표시되는 예; 내 생각은 주로 JVM이 픽업 할 수 있는지, 다수의 jButton에 동일한 오브젝트가 주어 졌는지, 따라서 동일한 항목을 공유하게했는지 여부였다. –

+0

아주 좋은 질문입니다. 그리고 그 대답은 쉽지 않습니다. 아마도 똑똑하지 않을까요? 우리가 할 수있는 일을 남겨두고 있습니까? –

3

이 달려있다.

이렇게하면 동일한 인스턴스가 생성됩니다.

ActionListener al = new ActionListener() { ... }; 
button.addActionListener(al); 
button2.addActionListener(al); 
... 

이것은 자신에게 줄 것입니다.

button.addActionListener(new ActionListener() { ... }); 
button2.addActionListener(new ActionListener() { ... }); 
1

나는 5 개의 버튼 모두에 동일한 ActionListener 객체를 전달할 것이라고 믿는다. 진실을 알고 싶다면 직접 시험해 보시기 바랍니다.

관련 문제