문제

코드 스 니펫은 다음과 같습니다.

public static void main (String[]arg) 
{
    char ca = 'a' ; 
    char cb = 'b' ; 
    System.out.println (ca + cb) ; 
}

출력은 다음과 같습니다.

195

왜 이런 경우입니까? 나는 그것을 생각할 것이다 'a' + 'b' 둘 중 하나 일 것입니다 "ab" , "12" , 또는 3.

여기서 무슨 일이야?

도움이 되었습니까?

해결책

+ 둘의 char 문자열 연결이 아닌 산술 추가입니다. 당신은 같은 일을해야합니다 "" + ca + cb, 또는 사용 String.valueOf 그리고 Character.toString 적어도 하나의 피연산자가 + a String 연산자가 문자열 연결이되기 위해.

JLS 15.18 부가가자

a의 피연산자 유형 인 경우 + 운영자입니다 String, 그런 다음 작업은 문자열 연결입니다.

그렇지 않으면, 각 피연산자의 유형 + 연산자는 원시 숫자 유형으로 컨버터블이 있거나 컴파일 타임 오류가 발생하는 유형이어야합니다.

왜 당신이 195를 받고 있는지에 관해서는 ASCII에 있기 때문입니다. 'a' = 97 그리고 'b' = 98, 그리고 97 + 98 = 195.


이것은 기본을 수행합니다 int 그리고 char 주조.

 char ch = 'a';
 int i = (int) ch;   
 System.out.println(i);   // prints "97"
 ch = (char) 99;
 System.out.println(ch);  // prints "c"

이것은 문자 인코딩 체계의 문제를 무시합니다 (초보자는 아직 걱정하지 말아야합니다 ...).


참고로, Josh Bloch는 불행하다고 언급했습니다. + 문자열 연결 및 정수 추가에 대해 과부하가 걸렸습니다 ( "문자열 연결을 위해 + 연산자에게 과부하가 걸리는 것은 실수 일 수 있습니다." - 자바 퍼즐 러, 퍼즐 11 : 마지막 웃음). 이런 종류의 혼란은 문자열 연결을 위해 다른 토큰을 가지고있어 쉽게 피할 수있었습니다.


또한보십시오

다른 팁

나는 Java를 말하지 않지만 195는 97 + 98 = ASCII 코드입니다. a 그리고 b. 분명히, ca 그리고 cb 아마도 정수 값으로 해석됩니다. + 추가되지 않은 추가 문자열이 자동으로 연결되지 않는 것 같습니다.

+ 연산자의 결과로 문자열을 원한다면 유형 문자열을 피연산자로 사용해야합니다.

당신은 다음을 작성해야합니다 :

public static void main (String[]arg) 
{
    String ca = "a" ; 
    String cb = "b" ; 
    System.out.println (ca + cb) ; 
}

숯 피연산자에 적용된 + 연산자는 산술 합계로 동작합니다.

그만큼 + 연산자는 문자열을 통해 캐릭터와 같이 작동하지 않습니다. 여기서 일어나는 일은 그 것입니다 a 그리고 b 그들의 정수 ASCII 코드 포인트 (97 및 98)에 캐스트되고 함께 추가되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top