char + 다른 char = 이상한 숫자는 왜
-
19-09-2019 - |
문제
코드 스 니펫은 다음과 같습니다.
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)에 캐스트되고 함께 추가되었습니다.