본문 바로가기

Develop/JAVA & Spring

string(문자열) 비교 ==, equals 의 차이

== 는 선언된 변수가 참조하는 메모리 주소를 비교함

equals()는 선언된 변수의 값을 비교함

 

예시)

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

    String testVal = "test";

    String testVal2 = "test";

    String testVal3 = new String("test");

    

    boolean a = false;

    boolean b = false;

    boolean c = false;

    boolean d = false;

    

    if(testVal == testVal2) a = true;

    if(testVal == testVal3) b = true;

    

    if(testVal.equals(testVal2)) c = true;

    if(testVal.equals(testVal3)) d = true;

 

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

출력<br/>

String testVal : <%=testVal %><br/>

String testVal2 : <%=testVal2 %><br/>

String testVal3 = new String("test") :  <%=testVal3 %><br/><br/>

비교<br/>

if(testVal == testVal2) : <%=a %><br/>

if(testVal == testVal3) : <%=b %><br/>

if(testVal.equals(testVal2)) : <%=c %><br/>

if(testVal.equals(testVal3)) : <%=d %>

</body>

</html>

 

실행해보면 true, false, true, true 순으로 결과 나올것이다.

 

java에서는 선언된 변수의 값이 같으면 같은 메모리를 참조하기 때문에 == 를 사용해서 비교를 하면 true가 나오지만

 

new String()을 통해서 생성된 변수는 값이 같아도 새로 생성된 메모리 주소를 참조하기 때문에 == 를 사용해서 비교하면 

 

false가 나오는것입니다.

 

참조하는 메모리 주소가 달라도 값 자체를 비교하는 equals()는 전부 true가 나옵니다.

 

간단하지만 쉽게 잊을만한 내용입니다.

 

수고하세요.


'Develop > JAVA & Spring' 카테고리의 다른 글

Java Decompiler  (0) 2016.11.21
request 내용 확인  (0) 2016.11.08
올바른 equals() 사용법  (0) 2016.10.26
JSP/Servlet에서 사용하는 Request 객체의 메소드  (0) 2016.10.26
Java - Null Check 및 String 비교  (0) 2016.10.24