2012-09-04 2 views
3

main(String[] args)과 내가 이해할 수없는 다른 문자열 배열 사이에 차이가있는 것처럼 보입니다. 제 예제입니다. 내가 출력이 "truetrue을"로 대신 내가다른 문자열 배열과 같은 명령 줄 인수를 비교할 수없는 이유는 무엇입니까?

누군가의 차이가 무엇인지 말해 주시겠습니까 "truefalse"얻을 기대

java TestArgs 1 2 3 

:

public class TestArgs 
{ 
public static void main(String[] args) { 
    String[] x = {"1","2","3"}; 
    System.out.print(x[2] == "3"); 
    System.out.print(args[2] == "3"); 
}} 

나는대로이 프로그램을 실행 , 아니면 그냥 바보 같은 일을하고있는 것입니까?

+0

Naive에 대한 값을 제공하지 않았기 때문일 수 있습니다. 아주 어리 석다. –

+0

* .. "truefalse"를 얻습니다. * println을 사용하는 좋은 사례입니다. ;) –

답변

7

자바에서는 문자열 평등을 테스트하기 위해 "test".equals("test")을 사용해야합니다.)

문자열이 개체이고 동일한 개체가 아니며 값이 같습니다.

+0

그렇다면 왜 내가 생성 한 String은 == 연산자로 작동하지만 main (String [] args)으로 생성 된 String이 아닌가? – MrDetail

+4

@MrDetail Java가 String을 내부화하는 방식 때문에. "3"이라는 두 개의 인스턴스를 생성하기보다는 자바가 하나를 생성하므로 참조 위치는 자바가 관련된 한 실제로 동일합니다. 이것이 그의 솔루션이 그토록 중요한 이유입니다. – MadProgrammer

+0

yep - thx @MadProgrammer – TheHe

2

== 연산자는 참조별로 개체를 비교합니다.

5

==을 사용할 때 개체 참조를 비교하기 때문입니다. String을 비교할 때 == 대신 .equals()을 사용하십시오. 이 SO answer은 이유를 더 잘 설명합니다. 이 같은

그래서 코드가 될 것입니다 뭔가 :

public class TestArgs { 
    public static void main(String[] args) { 
     String[] x = {"1","2","3"}; 
     System.out.print("3".equals(x[2]); 
     System.out.print("3".equals(args[2])); 
    } 
} 
또한

, 이이 응답에 직접 관련이없는, 어떤 일을하기 전에 args의 길이를 확인하는 것이 좋습니다 그것을 사용하는 작업. 그 이유는 최종 사용자가 args[2]

관련 문제