2012-06-23 2 views
1

이 문제에 대한 대답을 찾으려고 시도했지만 검색 할 내용이 확실하지 않습니다. 기본적으로 내가 원하는 것은 (명령 행에) 입력 할 수 있도록 내 프로그램의 사용자를위한 것입니다 명령 줄 인수를 문자열 리터럴과 비교할 때 도움이 필요하십니까? Java에서

java galaxySim HELP 

및 파일 형식과 물건에 대해 그들에게 몇 가지 물건을 말할 내 프로그램

. 그렇지 않으면 첫 번째 인수는 파일 이름입니다. 그래서 내가해야 할 코드는 다음과 같습니다.

if (args[0] == "HELP") { 
    System.out.printf("Help Stuff..."); 
}else{ 
    filename = args[0]; 
    System.out.printf("Filename found"); 
} 

오류 처리 기능에 캡슐화되어 있으므로 영향을 미치지 않는다고 기록되어 있습니다. 문제는 이것입니다. 첫 번째 인수로 입력 한 내용은 항상 else 문으로 이동합니다.

필자는 인수 앞뒤에 공백을 추가하는 실험을 해봤지만 결코 도움이되지 않습니다. 나는 마치 내 IF 문에 문제가 있다고 생각하지 않는다. 쓸데없는 것 같다.

if(args[0] == args[0]){ 

올바른 진술로 이동한다. 마치

args[0] == "Help" 

이 항상 거짓 인 것 같습니다. 어떤 종류의 인코딩 문제가 있습니까? 나는 그것이 차이를 만드는 경우 win7을 사용하고 있습니다.

프로그램의 핵심 부분은 아니지만 ... 효과가 있으면 좋을 것 같습니다. 여기에 뭐가 잘못 됐는지 알아?

감사합니다.

+0

가능한 중복 작성해야 [I 자바에서 문자열을 비교합니까 어떻게?] (http://stackoverflow.com/questions/513832/how-do-i-compare- strings-in-java) – assylias

답변

4

equals

변경이를 사용하여 String의 비교 :

if(args[0] == "HELP")

if(args[0].equals("HELP"))

==

에 참조 어떤지를 비교, 평등의 가치를하지. 값을 확인해야하므로 equals()을 사용해야합니다.

자세한 내용은 link입니다.

==equals() 방법의 차이점을 이해하려면 this을 읽고 싶을 수도 있습니다.

+0

다른 사이트를 가리 키지 않아도됩니다. [Java 위키 하단의 Java FAQ] (http://stackoverflow.com/tags/java/info)! – assylias

+1

@assylias 죄송합니다. 나는 단지 좋은 읽을 거리를 제공하기를 원했다. 다음 번에는 그것을 염두에 두겠습니다. :) –

+0

두 번째 링크 "Java에서 문자열을 어떻게 비교합니까?" ;-) – assylias

1

String 인스턴스를 equals()과 비교해야합니다 (==이 아님).

그래서 당신이 사용하는 경우 == 당신은 그들이 (즉, 당신은 본질적으로 피연산자가 저장되어있는 메모리의 자리가 같은 있는지 확인하는 동일한 객체 있는지 확인하는 args[0].equals("Help")

사용), 클래스의 의미에 따라 동등한 인스턴스인지 확인하기보다는 확인하십시오.

0

글쎄, 우리는 모두 문자열이 객체라는 것을 알고 있으므로 ==으로 비교할 수는 없습니다.객체 지향 컨텍스트에서 == 연산자를 사용하여 두 참조가 동일한 객체를 가리키는 지 확인합니다.

args[0] == "HELP" 

,이 사항에 의한 그래서 당신은 확실히 아니다 "HELP"문자열에 의해 반환되는 참조가 같은 객체를 가리키는 여부 [0]과 인수를 참조하는 JVM을 말하고있다. 사용자가 입력 한 문자열과 "HELP"문자열이 완전히 다른 객체이기 때문입니다.

두 개의 개체를 확인하려면 문자 그대로 (또는 의미가 같은) equals() 메서드가 있어야합니다.

그래서 궁극적으로

, 당신의

args[0].equals("HELP") 
관련 문제