왜 new String (“”)은 컴파일되지만 char c = ''는 컴파일되지 않습니까?
왜 빈 문자열은 유효하고 빈 문자는 유효하지 않습니까? 빈 문자열은 문자열이 아니라 자리 표시 자라고 생각했을 것입니다. 문자에 대해서도 동일하지만 빈 문자를 생성해도 컴파일되지 않습니다.
내가 궁금해하는 것은 다음과 같은 일이 발생하는 이유입니다-컴파일-
String s = "";
컴파일하지 않음-
char c = '';
char
단일 문자를 나타 내기 때문에 ''
그렇지 않습니다. 문자열은 0 개 이상의 문자를 포함 할 수 있지만 하나의 문자는 단일 문자 이외의 것이 될 수 없습니다.
문자열 리터럴은 0 개 이상의 문자 로 구성 될 수있는 문자열을 나타내지 만 (유효한) 문자 리터럴은 정확히 하나의 문자를 나타냅니다 .
문자는 0 또는 1 문자를 저장할 수있는 데이터 유형으로 정의 할 수 있습니다.
예. 이론적으로는 그렇게 정의 될 수 있습니다. 그러나 저를 믿으십시오. 모든 문제 (예 : 빈 문자를 나타내는 방법, 응용 프로그램에서 처리하는 방법 등)를 고려하면 이점이 거의없고 심각한 단점이 있다는 결론을 내릴 수 있습니다.
어쨌든,이 일을 단순히 그렇게 문자열과 문자 리터럴 사이의 구문 일관성이 완전히 미친 것이 있었다는 것을. 구문이 멋지게 보이도록 언어의 성능 및 / 또는 의미를 깨지 않습니다.
허용 된 답변에 대한 한 의견 ''
은 '\0'
. 그러나 이것에 대한 반론은 그것이 '\0'
문자가 없다는 것을 의미하지 않는다는 것입니다. 값이 0 인 하나의 문자를 의미합니다. 따라서 ''
실제로 한 문자를 의미 한다면 오해의 소지가 있습니다. 그리고 이미 이것을 표시하는 방법이 있기 때문에 ... '\0'
... 그것을 표시하는 두 번째 방법은 중복됩니다.
새로운 언어 구문의 일부가 오해의 소지가 있고 중복되는 경우 추가하는 것을 정당화하기 어렵습니다.
SoloBold의 의견에 따라 문자 유형을 정의 할 수는 있지만 더 많은 공간이 필요합니다. 어색한 메모리 정렬 문제를 피하기 위해 1 비트 이상, 16 비트 일 가능성이 높습니다. 32 비트 char
유형은 다른 문제를 해결하더라도 허용되지 않습니다.
""
빈 문자 배열입니다.
''
단순히 캐릭터가 아닙니다.
빈 문자열은 아무것도 보관하지 않는 컨테이너와 같습니다. A char
에는 값이 있어야하며 정확히 하나의 문자가 없으면 해당 값을 파생 할 위치가 없습니다.
문자열은 일련의 문자로 볼 수 있습니다. 문자가없는 빈 시퀀스를 갖는 것은 의미가 있으며, 문자가 아닌 문자를 갖는 것은 의미가 없습니다.
또한 사용하지 않습니다 String s = new String("");
만, String s = ""
충분하다.
수학적으로 알파벳 A는 기호 집합이며 알파벳 A = {a, b, c, d, ..., z}라고 가정합니다. 문자열 L은 알파벳의 0 개 이상의 문자 시퀀스입니다 (예 : L = A *). 빈 문자열은 단순히 0 개의 문자 시퀀스입니다. "빈 문자"는 알파벳의 구성원이 아닙니다.
당신은 빈 문자를 가질 수 없으며 비논리적입니다.
char은 기본 유형이므로 값이 무엇이든 제공해야합니다. 변수를 "정의되지 않음"으로 두려면 래퍼 개체를 사용할 수 있습니다.
Character c = null;
이런 식으로 변수 c는 (아직) 어떤 값도 포함하지 않습니다. 그러나 가치를 추가하십시오! :)
그건 그렇고, 기본 char
유형에 대해 객체 래퍼를 사용할 수 있습니다 .
Character c = null;
Character c2 = 'a';
이것은 필드가 "문자이거나 아무것도 아닌"상태를 원할 때 유용 할 수 있습니다.
String s = null; // OK
String s = new String(""); // OK
String s = new String("A"); // OK
String s = new String("ABC"); // OK
char c = 'A'; // OK
char c = ''; // NOT OK!
Character c = null; // OK
Character c = new Character('A'); // OK
Character c = new Character(''); // NOT OK!
아마도 char은 기본 유형이고 String은 객체이기 때문일 것입니다. boolean, int 등도 "빈"값을 허용하지 않습니다.
문자는 문자, 숫자, 구두점, 탭, 공백 또는 이와 유사한 단일 문자입니다.
문자열은 0 이상이 될 수있는 문자 집합입니다. 따라서 빈 문자열은 유효하며 문자가 없습니다. BUt char은 ''가 아닌 하나의 유효한 문자 여야하는 Character의 기본 유형을 나타냅니다.
빈 문자 / 문자열과 빈 문자 / 문자열의 차이점을 알아야한다고 생각합니다. 공백 문자 / 문자열은 ''(SPACE), '\ t'등과 같은 일부 내용이있는 문자 / 문자열을 나타내며, 빈 문자는 내용이 없으며 빈 컨테이너로 볼 수 있습니다.
참조 URL : https://stackoverflow.com/questions/7174485/why-does-new-string-compile-while-char-c-does-not
'programing' 카테고리의 다른 글
중복을 찾기 위해 T-SQL 코드를 얻는 방법은 무엇입니까? (0) | 2021.01.16 |
---|---|
cocoaLumberjack을 사용하여 로그 파일이 저장되는 위치 (0) | 2021.01.16 |
httpd 서버가 시작되지 않음 : (13) 권한이 거부 됨 : make_sock : 주소 [::] : 88에 바인딩 할 수 없습니다. (0) | 2021.01.16 |
JSF 페이지에서 요청 및 세션 매개 변수 및 속성 가져 오기 (0) | 2021.01.16 |
ES2015 / ES6의 스프레드 구문 vs 나머지 매개 변수 (0) | 2021.01.16 |