본문 바로가기

프로그래밍

if else문 비교 == 과 equals 의 차이점은 뭘까?

if else문 비교 == 과 equals 의 차이점은 뭘까?

오늘 오전중 작업하면서 겪은것을 적어보도록 하겠다....

if else 이것은 프로그램 코드를 하다보면 누구나 접해본 것일것이다...

기본중이 기본!! 쉬우면서도 조건걸때 사용하는 것인데...

여기서 사람들이 질문하는것은 == 과 equals일것이다.

언뜻 보기엔 둘다 값을 비교하는거라 같아 보이고 특히 c언어에서는 ==만 사용하면 왠만한것은 if문으로 조건 가능하다.

"하지만 자바에서는 객체 비교할때는 ==이 아닌 equals로 비교를 할것이다."

 위의 빨간색으로 칠해진 부분에 대해서 보충 및 수정들어갑니다~~...

= >보충 내용

자바에서 객체를 비교할때에는 equals를 사용한다고 말하는것은 리터널 값때문이다.

댓글에 보면 이름명 : finerss 으로 잘못된 부분에 대해 지적해주신 분의 내용이 있는데..

 

아래의 코드를 잠시보면 첫번째는 == 으로 code라는 값 자체와 A12라는 값 자체를 비교한것이기에

code = A12 : false  로 다르고

"A12".equals(code)의 경우 리터럴 값 즉 code라는 변수 안에있는 값을 비교하므로

code의 값은 A12 이므로,

"A12" == code  == A12 : true 가 성립되게 된다.

착각의 요인을 만들어 정말 죄송하게 생각한다... ㅠㅠ


그럼 여기서 간단한 소스로 비교를 해보는것도 좋을것이다!

code =  (Stirng)session.getAttribute("code");
들어오는 값은 A12

1. 첫번째
if
(code == "A12"){

조건실행문

else{

조건이 아닌경우 실행문

}

2. 두번째
if
(("A12".equals(code))

조건실행문

else{

조건이 아닌경우 실행문

}


위와 같이 1. 첫번째 2. 두번째 소스가 있다.

여기서 1. 첫번째에는 if문을 넘어서 else문으로 넘어가버리고,

2. 두번째에서는 if문을 실행한다.

뭐가 다른것일까?

String으로 code값이 들어오기 때문에 그럴것이다.

근데? 왜 다른 클래스를 만들어서 하면 equals도 if문을 실행하는걸까?

참 알수 없다;;
그저 클래스만 다를뿐인데;;;