2017-12-04 1 views
-2

, 나는이 코드를 가지고 :자바 String 객체 참조

public class Strut 
{ 
    public static void main(String[] args) 
    { 
     String s=new String("wooo!"); 
     String t=s; 
     System.out.println(s+","+t); 
     t="blaaaah"; 
     System.out.println(s+","+t); 
    } 
} 

내가 자바 객체를 할당하지 않기 때문에 그것을 잘 객체가 항상 힙에 할당 받았다면 디자인에 의해 스택에. 그래서 변수 s와 t는 단지 내가 쓴 코드에서 같은 객체에 대한 참조 일뿐입니다? 그래서 내가 처음에 s와 t를 인쇄 할 때 나는 똑같은 결과를 기대하며 괜찮습니다. 하지만 t를 수정하고 문자열을 다시 인쇄하면 은 t와 s가 같은 객체에 대한 참조이므로 blaaaah가되어서는 안됩니다. 감사합니다.

+3

이제 't'는 다른 개체를 나타냅니다. –

+0

당신은 내가 "="blaaaah "라고 쓸 때 새로운 객체를 할당하고 이미 존재하는 것을 수정하는 insted에 T를 연결한다는 것을 의미합니까? 내가 왜 downvoted되었습니다 알아도 될까요? –

+0

맞습니다. '='는 객체를 수정하지 않습니다. 나는 왜 당신이 downvoted했는지 모르겠다. –

답변

-1

한 문장으로 대답 할 수 있습니다. 문자열은 변경 불가능합니다.
그렇습니다. 따옴표를 사용할 때마다 실제로 새로운 String 객체를 만듭니다. 왜 대신 일을 그게 전부입니다 :

String s=new String("wooo!"); 

당신은 다만 수 :

String s = "wooo!"; 

그리고 그것은 같은 것입니다.
PS.Immutable은 각 String 객체가 동일한 값을 가질 것이라는 것을 의미합니다. 삭제 될 때까지는 문자열 참조가 값을 변경하면 다른 객체를 다시 전달한다는 것을 알 수 있습니다.

+0

감사합니다, 그래서 당신은 자바 객체에서 항상 스택에 힙에 할당되어 있는지 확인할 수 있습니까? –

+3

이것은 문자열이 변경되지 않기 때문이 아닙니다. –

+0

@OliverCharlesworth 문자열은 변경할 수 없지만 다른 객체와 동일합니다. (그러나 나는 문자열이 불변의 망치로 코드를 수정할 수 없다는 사실을 짐작할 수 있습니다.) –