user727062 :
며칠 전, 나는 자바 코드에 오타하지만 잘 컴파일했다. (결과는 이상하다하지만.)
내 코드는 다음과 같습니다
public static void main(String args[]) {
String strOut;
char cSEP = '|';
String sSEP = "|";
strOut = "AA" + cSEP + "BB"; // Correct assignment
System.out.println(strOut); // The result is "AA|BB". This is OK.
strOut = "AA" + + cSEP + "BB"; // No Error : no token between two +
System.out.println(strOut); // The result is "AA124BB"
strOut = "AA" + + sSEP + "BB"; // This is compiler error !!!
System.out.println(strOut);
}
2 할당 오류가 아닙니다 124 인쇄 왜 내가 찾을 수 없습니다. (물론, '|'ASCII 코드 (124)입니다 그런데 왜 "124"하지. "|"?)
이 컴파일러의 버그인가? 또는 올바른 자바 문법 아직 몰랐다고?
스위퍼 :
의 차이 String
와는 char
중요하다. A의 적용했을 때 어떤 숫자 연산자 char
의 회전 char
에을 int
(이라고 단항 숫자 승진 ). 한편, 단지 이진 +
연산자가 정의되어 String
S.
코드의 두 번째와 세 번째 라인에서, 표현은 다음과 같이 해석한다 :
strOut = "AA" + (+ cSEP) + "BB";
단항 +
(A)에인가 될 때 작업자는 char
,으로 전체 턴 식 int
단항 숫자를 통해 추진. 값은 문자의 부호화 값과 동일하다. 표현이됩니다 그래서 :
strOut = "AA" + 124 + "BB";
이는 유효합니다.
그러나 경우 cSEP
로 대체했다 sSEP
:
strOut = "AA" + (+ sSEP) + "BB";
자바 컴파일러는 무엇을 알 수 없습니다 + sSEP
것을 의미합니다. +
단항 연산자는 정의되지 않았습니다 String
!