2013-01-20 3 views
1

문자열을 함수로 취해 int를 반환하는 함수를 만들려고합니다.Java - 함수에서 int를 반환하는 (String)?

public int convert (String input) { 
    int x = -1; 
    if (input == "one") { 
     x = 1; 
    } 

    else if (input == "two") { 
     x = 2; 
    } 

    else if (input == "three") { 
     x = 3; 
    } 
    return x; 
} 

문제는, (입력 가정은 항상 3 개 개의 입력 중 하나가 될 것이다)가되는 함수는 항상 리턴 -1. 필자는 시도 :

  • 대신 X
  • 의 0을 반환하고 :

    public int convert (String input) { 
    
        if (input == "one") { 
        return 1; 
        } 
        else if (input == "two") { 
        return 2; 
        } 
        else if (input == "three") { 
        return 3; 
        } 
        return -1; 
    } 
    

고마워합니다.

+2

첫 번째 방법은 항상 '-1'이 아니라 '0'을 반환합니다. 나는 그것을 편집했다. – tipycalFlow

답변

11

한 가지 문제는 다음과 같습니다

if (input == "one") 

if ("one".equals(input)) 

이 문자열/개체 평등 검사 (문자열 리터럴 비교의 경우 제외) 등호() 대신 == 방법

을 사용해야해야

==은 참조 평등을 검사합니다.

equals()equals() 구현을 기준으로 객체 내용 일치 여부를 확인합니다.

1

두 문자열이 같은지를 비교할 때 "=="연산자를 사용하지 마십시오. "=="연산자가 주소 평등을 검사하기 때문에, 즉 "x == y"를 비교하는 경우 x 값과 y 값이 같은 메모리 위치에 있는지 확인하고 있기 때문입니다. == 연산자가 참조를 비교한다는 의미입니다.

String은 객체이므로 두 객체를 비교할 때 == 연산자를 사용하지 않습니다. 따라서 두 객체가 동일한 객체를 가리키는 지 비교할 때 비교할 수 있습니다.

입력 한 개체를 가리키고 입력을 다른 위치에있는 다른 개체와 비교하고 있습니다.

예를 들어, 문자열 "input"은 주소 위치 123456에 값 "one"을 포함하고 주소 문자열 12347에 새 문자열 "one"이 작성됩니다. 따라서 input == "one"은 입력의 주소 위치와 동일하지 않습니다.

은 그래서 당신의 예를 들어

public int convert (String input) { 
int x = -1; 
if (input.equals("one")) { 
    x = 1; 
} 

else if (input.equals("two")) { 
    x = 2; 
} 

else if (input.equals("three")) { 
    x = 3; 
} 
return x; 
} 

.equals 방법은 객체의 평등이 아닌 참조 평등을 비교 사용한다. .equals() 메서드를 사용하여 두 객체를 비교하면 원하는 결과를 얻을 수 있습니다.

관련 문제