이 자바 컴파일러 오류 또는 올바른 문장인가?

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(이라고 단항 숫자 승진 ). 한편, 단지 이진 + 연산자가 정의되어 StringS.

코드의 두 번째와 세 번째 라인에서, 표현은 다음과 같이 해석한다 :

strOut = "AA" + (+ cSEP) + "BB";

단항 +(A)에인가 될 때 작업자는 char,으로 전체 턴 식 int단항 숫자를 통해 추진. 값은 문자의 부호화 값과 동일하다. 표현이됩니다 그래서 :

strOut = "AA" + 124 + "BB";

이는 유효합니다.

그러나 경우 cSEP로 대체했다 sSEP:

strOut = "AA" + (+ sSEP) + "BB";

자바 컴파일러는 무엇을 알 수 없습니다 + sSEP것을 의미합니다. +단항 연산자는 정의되지 않았습니다 String!

추천

출처http://43.154.161.224:23101/article/api/json?id=330125&siteId=1