2017-12-31 32 views
0

아래 코드는 제 코드입니다. 개체를 null로 설정했지만 여전히 내 print 문은 name 속성을 올바르게 인쇄 할 수 있습니다. 아무도 무슨 일이 일어나는지 말해 줄 수 있니?null 객체가 그 속성 값을 반환 할 수있는 방법은 무엇입니까?

public class MyClass { 
    String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String s) { 
     name = s; 
    } 
    public static void main(String args[]) { 
     MyClass obj = new MyClass(); 
     obj.changeName(obj); 

     System.out.println("Name = " + obj.getName()); 
    } 
    public MyClass() { 
     name = "A"; 
    } 

    public void changeName(MyClass obj) { 
     obj.setName("B"); 
     obj = null; 
    } 
} 

출력된다 :

NAME = B

답변

4

obj = null 방법만을 nullchangeNameobj 로컬 변수를 설정한다. 어떤 식 으로든 변수가 참조하는 객체에는 영향을주지 않습니다.

+3

값이 값을 매개 변수로 메서드에 전달 된 변수. – EJP

+1

그러면 어떻게 obj.SetName이 로컬 변수 대신 원래 객체의 속성으로 설정됩니까? – Sunil

+1

@Sunil 지역 변수'obj'는 원래 객체에 대한 참조를 가지고 있으므로 obj.setName ("B")'는 this.setName ("B")'와 같습니다. – Eran

-1

내가 잘못했다면 사과드립니다. 최근에 나는 코 틀린과 일하고 있으며 머리가 어지럽 힙니다.

나는 시도 것 중 하나

public void changeName(MyClass obj) { 
    obj.setName("B"); 
    obj.setName(null); 
} 

또는 당신은 내가 당신의 그 방법에 개체를 전달하고 개체의 값을 설정 사실을 함께 할 수있는 뭔가가 생각

public void changeName(MyClass obj) { 
    obj.setName("B"); 
    obj.setName().empty; 
} 

을 시도 할 수 있습니다 null는 부정한 오브젝트를 null로 할까, 또는 오브젝트 자체가 null 인 경우에서도 setName 치는 그 값을 보관 유지하고있을 필요가 있습니다. 그래서 setName 값을 null로 설정해야한다고 생각합니다.

+0

또한 메서드가 객체를 반환하도록 시도 할 수 있습니까? 그러면 그 객체를 받아 그 시점에서 null을 얻을 수 있습니까? – Vahalaru