2014-11-03 2 views
1

c3의 값이 ClassOne이고 ClassTwo 인 경우 해당 개체의 동일한 인스턴스로 간주되는지 알고 싶습니다. 나는 별도의 스레드에서 두 클래스의 ClassThreecheck() 메서드를 호출하고 서로 간섭 하는지를 알고 싶습니다.다른 클래스에 객체의 인스턴스를 전달하면 해당 객체의 동일한 인스턴스로 간주됩니까?

public class ClassOne{ 
    private ClassThree c3 = new ClassThree(); 
    public ClassOne(){} 

    public void passThreeToTwo{ 
     ClassTwo.setC3(c3); 
    } 
} 
//------------------------------------------------------* 

public class ClassTwo{ 
    private static ClassThree c3 = null; 
    public ClassTwo(){} 

    public static void setC3(ClassThree c3){ 
     this.c3 = c3; 
    } 
} 
//------------------------------------------------------* 

public class ClassThree{ 
    public ClassThree(){} 
    public synchronized check(){} 
} 

public static void main(String[] args){ 
    ClassOne c1 = new ClassOne(); 
    C1.passThreeToTwo(); 
} 

희망적인 예와 질문이 있습니까?

+0

분명히 당신은 자바를 배우고 있습니다. 앞으로 객체의 특정 인스턴스가 동일한 객체 참조 (동일한 위치를 가리키고 있는지)를 알고 싶다면 '=='연산자를 사용하여 동등성을 검사하기 만하면됩니다. 따라서'obj1 == obj2'가'true'를 반환하면, 그들은 같은 객체 참조입니다. 이 검사가 실패하면 (false를 반환) 동일한 위치를 가리키고 있지 않지만 동일한 값을 유지할 수 있습니다. 이를 확인하려면 객체를 "들여다보고"값의 동일성을 위해 데이터 멤버를 검사해야합니다. – hfontanez

+0

@hfontanez 오 죄송합니다, 오늘이 사실을 알게되었습니다. 감사합니다 – Devavrata

+0

@Devavrata, 나는 당신의 유감스럽게 생각하지만 나는 기울이지 않습니다. – Hozei

답변

2

예. 당신은이 작업을 수행 할 때 :

public static void setC3(ClassThree c3) 

당신이 ClassThree의 사본을 전달하지 않는 - 원래 C3에 참조를 전달하고 있습니다. 참조로 객체를 전달합니다 (복사 된 프리미티브와 반대입니다).

참조 동등성 검사를 수행하여이를 확인할 수 있습니다.

if (c3 == myOriginalC3) { 
    // it's the same 
} 

이는 객체 참조만을 비교하기 때문에.

+0

나는 c3을 private로 변경했는데 차이가 나지 않았습니까? – Hozei

+0

이것은 단순히 객체의 가시성에 영향을 미칩니다. –

+0

나는 그 간단한 질문을 알고 있지만 나는 단지 그것을 증명하기를 원했다. 빠른 답장과 팁 주셔서 감사합니다. – Hozei

2

예, Java에서 객체를 전달하면 실제로 동일한 객체에 대한 참조 만 전달합니다. Java는 참조로 전달을 사용합니다. 당신은 Java가 객체를 지원하지 않는 가치에 의한 전달을 말합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. – Hozei