2011-11-09 2 views
2

Java에서 다음과 같은 가장 간단한 코드 스 니펫을 살펴 보겠습니다. 동일한 유형 (INT) 모두 p 및 q 같은부울 값으로 평가되는 표현식은 Java에서 String과 연결될 수 없습니다. 왜?

final public class Parsing 
{ 
    public static void main(String[] args) 
    { 
     int p=10; 
     int q=10; 

     System.out.println(p==q); 
    } 
} 

자바 상기 코드가 미세하고 디스플레이 진정한 동일한 값 (10)을 포함한다. 이제 println()의 인수를 연결하여 새로운 줄 이스케이프 시퀀스 \ n을 포함하고 그 결과가 아래와 같이 새 줄에 표시됩니다. 표현 p는 == Q 부울 값과 자바 (안 부울, 래퍼 형)에서 부울 유형을 평가하는 모든 때문에에서 허용되지 않습니다

System.out.println("\n"+p==q); 

은에서 사용할 수있는 다른 종류로 변환 될 수 없다 자바. 따라서 위에 언급 한 문은 유효하지 않으며 컴파일 타임 오류가 발생합니다. 자바에서 이러한 상황을 극복하는 방법은 무엇입니까?


그리고 놀랍게도 다음 진술은 Java에서 완벽하게 유효합니다.

System.out.println("\n"+true); 
System.out.println("\n"+false); 

각각 true 및 false를 표시합니다. 방법? 성명서의 동일한 내용이 허용되지 않는 이유는 무엇입니까? System.out.println("\n"+p==q);?

답변

11

p == q 주위에 괄호()를 추가해야합니다 (작성 방법, ("\ n"+ p) == q로 해석되며 String은 부울과 비교 될 수 없습니다). 이 연산자의 우선 순위는 그래서,

System.out.println("\n"+(p==q)); 

이 잘 작동해야

if(a+b == c+d) 

등과 같은 표현을 위해 바람직하다.

"\n" + (p == q) 
+1

도움이 될 수 있습니다. [연산자 우선 순위] (http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) –

+1

바보 같은 실수입니다. – Lion

2

연산자의 우선 순위는 표현이 시도

("\n" + p) == q 

컴파일 오류가 발생하므로 int로 문자열을 비교하는 것은 무의미로 평가됩니다 것을 의미한다. 진술이 잘못되었습니다.

System.out.println("\n"+(p==q)); 

~ Dheeraj

1

아 :

+1

잘못 되었나요? 무슨 소리 야? – Lion

2

System.out에.println ("\ n"+ p == q);

컴파일러는

System.out.println(("\n"+p)==q); 

로 표현 p는 == q는 부울 값과 자바에서 부울 유형을 평가하는 모든 때문에 허용되지 않는 사용

System.out.println("\n"+(p==q)); 
2

을 취급 (부울이 아닌 랩퍼 유형)은 Java에서 사용 가능한 다른 유형으로 절대 변환 될 수 없습니다.

이 완전히 잘못된 것입니다. 문자열을 연결하는 것은 String.valueOf()을 통해 컴파일러에 의해 구현되며, 또한 부울 값을 허용하도록 오버로드됩니다.

컴파일러 오류의 원인은 + 그래서 코드가

System.out.println(("\n"+p)==q); 

에 해당하고 비교되는 Stringint을 가지고 있기 때문에 오류가 발생, ==보다 높은 연산자 우선 순위를 가지고 단순히 == 한편

이 의도 한대로 작동합니다

System.out.println("\n"+(p==q)); 
관련 문제