Lavely
30
2020-10-31 23:09:09
4
324

if문이 원하는대로 동작하지 않을때..


안녕하세용

화면에서 파라미터로 보내는 a는 1또는 0으로 넘어오는데요,

sysout 찍어보면 분명 값은 1/0으로 넘어오는데

if문을 안타고 어떤 값이 오든 자꾸 else만 타는데...

아, a=="0"으로 하면 if쪽만 타요..

대체 왜일까요..


String a = dto.getAbc();

System.out.println( a );

if(a=="1"){

    getDao().stop(dto);

} else {

    getDao().start(dto);

}


0
  • 답변 4

  • 사과돌이
    72
    2020-10-31 23:15:37
    if(a.equals("1")
  • Lavely
    30
    2020-10-31 23:23:12

    아 헐.......감사해요..

  • defult
    9k
    2020-10-31 23:37:36
    문자열(배열포함)은 값을 비교연산자로 비교할수 없습니다.
  • RWB
    572
    2020-11-01 00:17:29

    윗 분들 답변에 첨언하자면,


    JAVA에서의 String, 즉 문자열 데이터는 값을 임의의 주소에 저장하고, 변수는 이 주소를 참조합니다.


    String a = "test";

    위 구문에서 a의 값인 "test"는 임의의 적절한 메모리에 저장되고, 변수 a는 "test"라는 값이 아닌 "test"가 저장된 주소를 참조하여, 변수 사용 시 해당 주소를 반환하게 됩니다.


    System.out.println(a);

    위 구문에서 결과로 콘솔에 test가 출력되는데, 변수 a가 "test"가 저장된 주소를 반환하고, 메서드에서 반환받은 주소에 접근하여 "test"라는 값을 찾아 사용하게 됩니다.


    String a = "test";
    String b = "test";

    이러한 특성으로, 변수 a와 b는 각각 동일한 "test" 문자열이 할당되었지만, a와 b의 "test"가 저장된 주소값이 서로 다릅니다. JAVA에서 String 변수는 문자열이 저장된 주소값을 참조하기 때문에, a와 b는 서로 다른 값(주소값)을 가지는 상태입니다., a와 b는 동일한 문자열이 할당되었음에도 실질적으론 동일하지 않은 이유입니다.


    JAVA에서 == 연산은 변수가 가진 주소를 비교합니다. a와 b는 할당된 문자열은 같지만, 그 주소가 서로 다르므로 == 연산 시 false가 계산됩니다.


    반대로 equals() 메소드는 변수의 값을 비교하므로, a와 b가 가진 주소에 저장된 실질적 값이 같아 true가 계산됩니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.