안드로이드 개발 질문/답변
(글 수 358)
호출하는 액티비티
Intent intent = new Intent(SearchStop.this, StopInfoDetail.class);
intent.putExtra("stopRegion", list.get(p).getStopRegion()); //getStopRegion()메서드의 리턴 타입은 String
startActivity(intent);
호출되는 액티비티
ImageView stopRegion = (ImageView)findViewById(R.id.stopRegion);
if(intent.getStringExtra("stopRegion") == "abc") {
stopRegion.setImageDrawable(getResources().getDrawable(R.drawable.hccharater));
} else if (intent.getStringExtra("stopRegion") == "def") {
stopRegion.setImageDrawable(getResources().getDrawable(R.drawable.cccharacter));
} else {
stopRegion.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
}
이런 경우에 토스트로 인텐트 엑스트라 찍어보면 정상적으로 abc나 def가 뜨는데
실제적으로 위 과정이 무조건 else로 빠지네요.... 인텐트에서 분명히 String을 리턴해주는 것 같은데
왜 비교연산이 제대로 안될까요;; 강제형변환 같은건 해봤는데 역시나 의미가 없더군요 ㅠㅠ
제가 기본적인거 틀린 것 같은데 짚어주세요 ㅠ
2012.02.10 10:34:45
문자열은 레퍼런스 변수 입니다. 레퍼런스 변수들이 가진 값은 실제 값이 있는 주소값을 가지고 있습니다.
레퍼런스 변수가 아닌 변수들은 int, long, double, float, char, boolean 등이 있고 그 값들은 자신이 가진 값이 실제값을 갖습니다.
여기서 == 비교는 자신이 가진 값을 비교하는 것이므로 같은 주소값을 가진 레퍼런스 변수라면 비교 값이 참이 되지만
같은 문자열이라도 주소값이 다르다면 거짓으로 나오게 됩니다.
equals메소드는 주소값을 찾아가서 실제 값을 서로 비교하게 해줍니다.
자바 기본 문법을 좀더 공부하시는것을 권해드립니다.
문자열 비교는 == 으로 할수가 없습니다.
equals 메소드로 비교해야만 값비교를 할 수 있습니다.