메소드 안에서 선언된 변수나 메소드는 메소드 종료 뒤 메모리에서 지워지나요?

예를 들면

string a = "good";
string b = " and ";
string c = "bad";

string 클래스의 concat 메소드를 이용해서 합친다 가정하면

string d = a.concat(b).concat(c);

이 과정을 상세히 써볼께요.

a클래스의 concat메소드를 호출, 인자로 b 집어넣음.
a+b 합쳐진 인스턴스 생성 ("good and ")
생성된 인스턴스의 주소값 반환
생성된 인스턴스의 주소값 반환.concat(c)
위 과정 반복

이게 최종적으로 good and bad 가 나오는건데..
인스턴스 생성과정을 변수라고 가정하면
변수는 최종값만 반환하고 메모리에서 사라지는데...

난 여태까지 메소드 안에서 생성된 것은 메소드 끝날시에
다같이 사라지는줄 알았는데...
생성된 인스턴스의 주소값 반환이 된다는 것 자체가
메모리에 아직도 "good and " 인스턴스가 존재하니
이거 차별아닌가?
변수랑 인스턴스랑 사실상 머 비슷한건데. 크기의 차이일뿐
변수는 값 저장하는 거고 인스턴스 이름은 주소저장된 포인터일뿐인데.
값 저장은 사라지고
포인터는 안 사라지니..

먼가 일관성이 없는거 같음.
없앨거면 쫙 다 없애던지
보존할거면 일괄 보존하던지.

내가 잘못생각하는건가?