2017-12-19 7 views
-1

java에서 "return"키워드에 대한 질문이 있습니다.Java - "return"키워드에 대한 질문 열기

"변경"이라는 메서드에서 지정된 인수 n을 가진 새 사람 개체가 반환되지만 주 개체의 "pone"정의 된 개체는 새 개체로 덮어 쓰지 않습니다. main 메소드에서 excuiting 한 후 "return person (n)"객체는 어떻게 될까요? 한 학생은 "는 옥수수 빵 객체의 값을 대체 할 새로운 사람 (N)을 반환한다는 얘기

이 코드 :.

public class Person { 

    String name; 

    Person(String name) { 
     this.name = name; 
    } 

    Person change(String n) { 
     return new Person(n); 
    } 

    void setname(String n) { 
     name = n; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

    public static void main(String[] args) { 

     Person pone = new Person("Jack"); 
     System.out.println(pone.change("Julia")); 
     System.out.println(pone); 
    } 
} 

출력 :

System.out.println(pone.change("Julia")); -> Julia 
    System.out.println(pone); -> Jack 
+2

당신이 들었던 것은 잘못되었습니다. – Eran

답변

0

귀하의 학생이 잘못

return new Person(n);Person(String name)을 호출합니다. this이 호출 할 때 인스턴스를 수정하는 것은 없습니다. ite.

change의 더 적절한 구현은 아마 당신이 여전히 Person 인스턴스를 반환하고 싶었 가정

Person change(String n) { 
    name = n; 
    return this; 
} 

입니다 - 종종 이러한 방법은 void 유형보다,하지만 당신이 허용 않습니다있는 방법 메서드 체이닝.

0

나는 분명히 당신이 말하는하지만 당신은 줄리아에게 잭을 변경하려는 경우 당신이 무엇을해야하는지 이해하지 못했다

String change(String n) { 
    return name = n; 
} 
+0

이름의 값을 변경하는 메서드 집합이 이미 있습니다. "void setName (String n)" – Prodigy

+0

@Stultuske 문자열 이름 만 반환합니다. –

0

이 시도 : 여기 키워드 새

Person pone = new Person("Jack"); 
pone = pone.change("Julia"); 
0

의미 변경 방법이 Person의 새로운 인스턴스를 만들고 새로운 인스턴스가 자신의 메모리를 할당하면, 생성자의 this는 생성 된이 새로운 객체를 가리킨다. 개체가 기존 사용자에게 영향을 미치지 않습니다.

+1

메서드 실행 후 Person의 새 인스턴스가 삭제됩니까? – Prodigy

+0

글쎄요 : 글쎄요 : 저장하거나 사용하지 않으면 해당 인스턴스를 다시 누른 다음 예 GC가 와서 메모리를 회수합니다. 그러나 변경 메소드의 결과를 새로운 사람에게 저장하면 그 사람은 계속 사용할 수 있습니다. –

0

학생의 의견이 잘못되었습니다. 값이 대체되지 않습니다. 1 인물 대신 2 인물이 생성됩니다.

여기 2 사람 개체가 생성되었습니다. 하나는 참조 번호가 "pone"(값이 Jack 인)이고 다른 하나 (값 Julia)는 "변경"메서드에서 반환 된 개체를 보유 할 참조 변수가 없습니다.

  1. System.out.println (pone.change ("Julia"))); 줄리아는 두 번째 객체로 인쇄합니다 줄리아. 이 값은 참조 변수에 할당되지 않으므로이 값은 앞으로 액세스 할 수 없으므로 GC에 적합합니다.
  2. System.out.println (pone); pone은 이 첫 번째 person 객체의 값을 보유하는 참조 변수이므로 Jack을 인쇄합니다.