1. 기본 유형 목록

Java에는 8개의 기본 기본 유형이 있습니다. 이러한 유형의 값은 객체가 아니며 변수 내부에 직접 저장되기 때문에 프리미티브라고 합니다.

다음은 이러한 유형에 대한 간단한 정보가 포함된 표입니다.

유형 크기
(바이트)
값 범위 기본값 설명
byte 1 -128 .. 127 0 가장 작은 정수 유형은 단일 바이트입니다.
short 2 -32,768 .. 32.767 0 짧은 정수, 2바이트
int 4 -2*10 9 .. 2*10 9 0 정수, 4바이트
long 8 -9*10 18 .. 9*10 18 0L 긴 정수, 8바이트
float 4 -10 38 .. 10 38 0.0f 부동 소수점 숫자, 4바이트
double 8 -10 308 .. 10 308 0.0d 배정밀도 부동 소수점 숫자, 8바이트
boolean 1 true,false false 부울 유형( true및 만 false)
char 2 0 .. 65.535 '\u0000' 문자, 2바이트, 모두 0보다 큼
기본값

그건 그렇고, 여기에 중요한 뉘앙스가 있습니다. 인스턴스 변수(필드) 또는 정적 클래스 변수를 선언하고 즉시 값을 할당하지 않으면 기본값으로 초기화 됩니다 . 표에는 이러한 값의 목록이 나와 있습니다.

메서드의 지역 변수에는 기본값이 없습니다. 이러한 변수에 값을 할당하지 않으면 초기화되지 않은 것으로 간주되어 사용할 수 없습니다.

그러나 기본 유형으로 돌아가 자세히 살펴보겠습니다.



2. 정수형

byteJava에는 , shortint의 4가지 정수 유형이 있습니다 long. 크기와 저장할 수 있는 값의 범위가 다릅니다.

int유형

가장 일반적으로 사용되는 int유형입니다. 이름은 int eger (정수) 라는 단어에서 유래했습니다 . 코드의 모든 정수 리터럴(정수)은 ( , , 또는 ints로 끝나지 않는 경우 )입니다.LFD

이 유형의 변수는 에서 -2,147,483,648까지 의 값을 가질 수 있습니다 +2,147,483,647.

그것은 많고 거의 모든 경우에 충분합니다. 숫자를 반환하는 거의 모든 함수는 int.

예:

암호 설명
int n = "String".length();
length()메서드는 문자열의 길이를 반환합니다.
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
필드 length에는 배열의 길이가 포함됩니다.

short유형

유형 은 short에서 이름을 가져옵니다 short int. 짧은 정수 라고도 합니다 . 유형 과 달리 int길이는 2바이트이고 가능한 값의 범위는 ~ -32,768입니다 +32,767.

즉, 백만이라는 숫자를 저장할 수 없습니다. 또는 50,000. Java에서 가장 드물게 사용되는 정수 유형입니다. 그것을 사용하는 주요 동기는 메모리를 보존하는 것입니다.

30,000을 초과하지 않는 값으로 작업할 것이며 이러한 값이 수백만 개 있을 것임을 미리 알고 있는 상황이 있다고 가정합니다.

예를 들어 색상당 비트를 사용하는 초고화질 사진을 처리하는 애플리케이션을 작성한다고 가정해 보겠습니다 10. 그리고 사진에는 백만 개의 픽셀이 있습니다. int사용 여부 가 중요한 시나리오입니다 short.

long유형

이 유형은 이름을 가져오고 long integerlong int 라고도 합니다 . 유형 과 달리 값의 범위는 엄청 납니다 .int-9*1018+9*1018

기본 정수 유형이 아닌 이유는 무엇입니까?

대부분의 컴퓨터가 32비트였던 90년대 중반에 Java가 등장했기 때문입니다. 이는 모든 프로세서가 32비트로 구성된 숫자 작업에 최적화되었음을 의미합니다. 프로세서는 64비트 정수로 작업할 수 있지만 작업 속도가 느립니다.

결과적으로 프로그래머들은 합리적으로 int표준 정수 유형을 만들고 long꼭 필요한 경우에만 유형을 사용하기로 결정했습니다.

byte유형

이것은 Java에서 가장 작은 정수 유형이지만 가장 적게 사용되는 것과는 거리가 멉니다. 그 이름인 는 byteJava에서 주소 지정이 가능한 가장 작은 메모리 블록을 나타내는 단어이기도 합니다.

bytetype: from -128to 에 유효한 값이 많지 않습니다 +127. 그러나 그것은 그 힘이 아닙니다. 이 byte유형은 메모리에 큰 Blob 데이터를 저장해야 할 때 가장 자주 사용됩니다. s 의 배열이 이 byte목적에 이상적입니다.

파일을 어딘가에 복사해야 한다고 가정합니다.

파일 내용을 처리할 필요가 없습니다. 메모리 영역(버퍼)을 만들고 파일 내용을 여기에 복사한 다음 해당 데이터를 버퍼에서 다른 파일로 쓰기만 하면 됩니다. 이를 위해 배열 byte이 필요합니다.

배열 변수는 메모리 영역에 대한 참조만 저장한다는 점을 명심하십시오. 변수가 어떤 메소드에 전달되면 메모리 주소만 전달됩니다. 메모리 블록 자체는 복사되지 않습니다.

byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
   int size = sourceFile.read(buffer); // Read data from a file into a buffer
   destFile.write(buffer, 0, size); // Write data from the buffer to a file

   // Stop copying if the buffer is not full
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. 실제 유형

프리미티브 유형에는 실수에 대한 두 가지 유형이 포함됩니다. 그 용어를 사용하는 것이 완전히 정확하지는 않지만. 컴퓨터가 실수를 처리할 때 이를 부동 소수점 숫자 라고 합니다 . 이름은 숫자의 정수와 소수 부분이 마침표(쉼표가 아닌 점)로 구분되는 숫자를 나타내는 표준에서 유래되었습니다.

몇 가지 유용한 정보:

나라마다 숫자를 쓰는 기준이 있습니다(놀랍죠!).

많은 사람들이 마침표를 사용하여 천 단위를 구분하고 쉼표를 소수 구분 기호로 사용하는 데 익숙합니다. 예를 one million ones and 153 thousandths들어 1.000.000,153. 그러나 Java 제작자가 살았던 미국에서는 다른 표준이 채택되었습니다.1000000.153

Java에는 두 가지 부동 소수점 기본 유형인 double및 가 있습니다 float.

앞에서 말했듯이 이러한 유형은 매우 구체적인 내부 배열을 가지고 있습니다. 사실 이러한 유형의 각 변수 내부에는 하나의 숫자가 아니라 두 개의 숫자가 있습니다.

예를 들어 부동 소수점 숫자 987654.321는 . 그런 다음 메모리에서 두 개의 숫자 ( 가수 , 즉 숫자의 중요한 부분) 및 ( 지수 , 즉 10의 거듭제곱) 으로 표시됩니다.0.987654321*1069876543216

float유형

유형 의 이름은 float ing-point numberfloat 에서 가져옵니다 . 이 유형의 크기는 4바이트(32비트)로 매우 작지만 에서 까지의 값을 저장할 수 있습니다 . 가수를 표현하기 위해 24비트, 지수를 표현하기 위해 8비트가 할당됩니다. 이 유형은 8개의 유효 숫자만 저장할 수 있습니다.-3.4*10383.4*1038

이 접근 방식을 사용하면 동일한 4바이트를 사용하면서 보다 훨씬 더 큰 숫자를 저장할 수 있습니다 int. 하지만 그러기 위해서는 정확도를 희생해야 합니다. 메모리의 일부가 가수를 저장하기 때문에 이러한 변수는 소수점 이하 6-7자리만 저장하고 나머지는 버립니다.

예:

암호
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

보시다시피 이 유형의 주요 단점은 유효 숫자가 매우 적고 8번째 숫자가 되는 즉시 정밀도가 손실된다는 것입니다. 이 유형이 Java 프로그래머 사이에서 그다지 인기가 없는 이유입니다 float.

double유형

유형은 double표준 부동 소수점 유형입니다. 이름은 배정밀도 부동 소수점 숫자 에서 가져옵니다 . 모든 실제 리터럴은 double기본적으로 s입니다.

이 유형은 8바이트의 메모리(64비트)를 차지하며 에서 까지 값을 저장할 수 있습니다 . 알아야 할 중요한 사항은 53비트가 가수에 할당되고 나머지 11비트는 지수에 할당된다는 것입니다.-1.7*103081.7*10308

이를 통해 15-17개의 유효 숫자를 저장할 수 있습니다.

예:

암호
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

특히 유형과 비교할 때 이 정밀도는 float결정적입니다. 실수를 사용하는 모든 연산의 99%가 유형을 사용하여 수행됩니다 double.

11비트는 지수에 할당됩니다. 즉, 에서 -323까지 10의 거듭제곱을 저장할 수 있습니다(즉, 에서 까지 +3082의 거듭제곱 ). 이 형식은 소수점 뒤에 수백 개의 0이 있는 숫자를 쉽게 저장할 수 있습니다.-1024+1023double

암호
double a = 2E-300 * 3E+302
600.0


4. 인피니티

부동 소수점 숫자에는 또 다른 흥미로운 기능이 있습니다. 무한대를 나타내는 특수 값을 저장할 수 있습니다 . 그리고 양의 무한대음의 무한대를 나타낼 수 있습니다 .

예:

암호 메모
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

무한대에 숫자를 곱하면 무한대가 됩니다. 무한대에 숫자를 더하면 무한대가 됩니다. 매우 편리합니다.

숫자가 아닙니다( NaN)

무한대와 관련된 모든 작업은 무한대를 생성합니다. 음, 전부는 아니지만 대부분입니다.

부동 소수점 숫자는 또 다른 특별한 값을 저장할 수 있습니다: NaN. N ot a N umber (숫자가 아님) 의 줄임말입니다 .

수학에서 무한대를 무한대로 나누면 그 결과는 정의되지 않습니다.

하지만 자바에서는 무한대를 무한대로 나누면 NaN.

예:

암호 메모
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

NaN수율이 있는 모든 작업 NaN.



5. char유형

Java 의 기본 유형 중에서 특별한 주의를 기울여야 하는 char유형이 있습니다. 그 이름은 char acter 라는 단어에서 유래했으며 유형 자체는 문자를 저장하는 데 사용됩니다.

문자는 문자열을 구성하는 것입니다. 문자열은 문자의 배열입니다.

하지만 더 흥미로운 점은 유형이 숫자 유형char 이기도 하다는 사실입니다 ! 말하자면 이중 목적 유형입니다.

현실은 char유형이 실제로 문자가 아니라는 것입니다. 대신 유니코드 인코딩의 문자 코드를 저장합니다. 각 문자는 숫자, 즉 문자의 숫자 코드에 해당합니다.

char변수는 메모리에서 2바이트를 차지합니다(유형과 동일 short). 그러나 short유형 과 달리 char정수 유형은 부호가 없으며 에서 0까지 값을 저장할 수 있습니다 65,535.

유형은 char하이브리드 유형입니다. 그 값은 숫자(예: 더하고 곱할 수 있음)와 문자로 해석할 수 있습니다. 이것은 문자가 시각적 표현이지만 컴퓨터에게는 무엇보다 단순한 숫자이기 때문에 수행되었습니다. 숫자로 작업하는 것이 훨씬 더 편리합니다.

유니코드

유니코드는 세계의 모든 문자를 포함하는 특수 테이블(인코딩)입니다. 그리고 각 문자에는 고유 번호가 있습니다. 대략 다음과 같습니다.

Java의 기본 유형

변수 에 값을 할당하는 방법에는 여러 가지가 있습니다 char.

암호 설명
char a = 'A';
변수 a에는 라틴 문자가 포함됩니다 A.
char a = 65;
변수 a에는 라틴 문자가 포함됩니다 A. 그 코드는 65.
char a = 0x41;
변수 a에는 라틴 문자가 포함됩니다 A.
코드는 이며 16진수 시스템 65과 같습니다 .41
char a = 0x0041;
변수 a에는 라틴 문자가 포함됩니다 A.
코드는 이며 16진수 시스템 65과 같습니다 . 두 개의 추가 0은 아무 것도 변경하지 않습니다. 41
char a = '\u0041';
변수 a에는 라틴 문자가 포함됩니다 A.
코드로 문자를 정의하는 또 다른 방법입니다.

대부분의 경우 사람들은 단순히 인용 부호로 문자를 표시합니다(표의 첫 번째 행에서와 같이). 즉, 후자의 방법도 인기가 있습니다. 그것의 장점은 문자열에서 사용할 수 있다는 것입니다.

그리고 우리가 말했듯이 char유형도 정수 유형이므로 다음과 같이 작성할 수 있습니다.

암호 콘솔 출력
char a = 'A';
a++;
System.out.println(a);
라틴 문자가 B화면에 표시됩니다.
왜냐하면:
A65
B66
C67

작업 char_

각각 char은 먼저 숫자(문자 코드)이고 그 다음이 문자입니다. 문자 코드를 알고 있으면 언제든지 프로그램에서 문자를 얻을 수 있습니다. 예:

암호 콘솔 출력
char c = (char) 1128;
System.out.println(c);

Ѩ

표준 코드

다음은 가장 잘 알려진 문자 코드입니다.

캐릭터 코드
0, 1, 2, ...9 48, 49, 50, ...57
a, b, c, ...z 97, 98, 99, ...122
A, B, C, ...Z 65, 66, 67, ...90


6. boolean유형

그리고 마지막 프리미티브 타입은 boolean.

이미 알고 있듯이 두 값만 사용할 수 true있습니다 false.

그것으로 당신은 이미 이 유형에 대해 알아야 할 모든 것을 알고 있습니다.