8가지 기본 데이터 유형은 다음과 같습니다. 1. 4개의 정수 유형(byte, short, int, long) 2. 2개의 부동 소수점 유형(float, double) 3. 1개의 문자 유형 4, 1개의 부울 유형; "부울".
이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.
Java에는 8가지 기본 데이터 유형이 있으며 각각 정수, 부동 소수점 숫자, 문자 데이터 및 부울 유형 데이터를 저장하는 데 사용됩니다. 주의할 점은 다음과 같습니다. 지금 소개하는 것은 기본 데이터 유형일 뿐이며, 기본이 아닌 많은 데이터 유형은 나중에 소개될 것입니다. 기본 데이터 유형은 그림 – 1에 나와 있습니다.
그림 - 1
그림 - 1에서 볼 수 있듯이 기본 데이터 유형은 주로 4가지 범주(정수 유형, 부동 소수점 유형)로 나뉩니다. type, char, boolean), 정수형은 4개의 하위 범주(byte, short, int, long)로 나뉘며 부동 소수점 유형도 2개의 하위 범주(float, double)로 나뉩니다. 그림-2는 이 8가지 데이터 유형의 저장 공간과 사용 시나리오를 보여줍니다.
그림 -2
위의 8가지 데이터 유형 중 가장 일반적으로 사용되는 5가지 유형은 int, long, 이중, 문자, 부울. 나머지 데이터 유형은 거의 사용되지 않습니다. 이 5가지 기본 데이터 유형을 집중적으로 익히는 것이 필요합니다. 다른 데이터 유형에 대해 배우고 싶다면 그렇게 해도 됩니다.
int는 가장 일반적으로 사용되는 정수형으로 32비트의 메모리 공간을 차지합니다. Int의 최대 표현 범위는 -231~231-1, 즉 -2147483648~2147483647로 약 플러스 마이너스 21억 정도이다.
소위 정수 리터럴(literal)은 직접 작성된 정수입니다. 예를 들어 다음 문에서 100은 리터럴입니다.
int a = 100; int a = 100;
정수 리터럴의 경우 다음 사항에 주의해야 합니다.
정수 리터럴의 기본 유형은 int 유형입니다. 직접 작성한 정수가 int의 표현 범위를 초과하면 컴파일 오류가 발생합니다. 다음 문장은 정수 범위를 초과하여 발생하는 컴파일 오류입니다.
int d = 10000000000; // 编译错误10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。 int d = 10000000000; // 编译错误10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。
일반적인 10진수 형식 외에도 정수 리터럴은 16진수 형식(0X 또는 0x로 시작) 또는 8진수 형식(0으로 시작)으로 작성할 수도 있습니다. 형식에 대한 다음 세 가지 표현을 참조하세요. :
int a = 100000; // 10进制 int b = 0x186a0; // 16进制 int c = 0303240; // 8进制 int a = 100000; // 10进制 int b = 0x186a0; // 16进制 int c = 0303240; // 8进制
두 개의 정수를 나누면 소수 부분은 버려지고(참고: 반올림되지 않음) 결과도 정수가 됩니다. 샘플 코드는 다음과 같습니다.
int c = 5/3; System.out.println(c); // c的值为1,取整 int total = 87; int error = 23; int percent = error / total * 100; System.out.println(percent+"%"); //结果为0%,23除以87整数部分为0,乘以100,为0 percent = 100 * error / total; System.out.println(percent + "%"); // 结果为26%,230除以87整数部分为26 int c = 5/3; System.out.println(c); // c的值为1,取整 int total = 87; int error = 23; int percent = error / total * 100; System.out.println(percent+"%"); //结果为0%,23除以87整数部分为0,乘以100,为0 percent = 100 * error / total; System.out.println(percent + "%"); // 结果为26%,230除以87整数部分为26
두 개의 정수를 연산할 때 결과가 정수의 범위를 초과할 수 있으며 양수가 너무 큽니다. 오버플로가 발생하면 결과는 음수가 됩니다. 음수가 너무 크면 결과는 양수가 됩니다. 샘플 코드는 다음과 같습니다.
int a = 2147483647; //int类型整数的上限 int b = -2147483648; //int类型整数的下限 a = a + 1; b = b - 1; System.out.println("a=" + a); //输出结果: a=-2147483648 溢出,结果错误。 System.out.println("b=" + b); //输出结果: b=2147483647溢出,结果错误。 int a = 2147483647; //int类型整数的上限 int b = -2147483648; //int类型整数的下限 a = a + 1; b = b - 1; System.out.println("a=" + a); //输出结果: a=-2147483648 溢出,结果错误。 System.out.println("b=" + b); //输出结果: b=2147483647溢出,结果错误。
정수를 표현할 때 int 유형의 범위가 충분하지 않으면 long을 사용할 수 있습니다. type, long 타입 변수 8바이트(즉, 64비트)를 차지하며, 최대 표현 범위는 -263~263-1, 즉 -9223372036854775808~9223372036854775807이다.
긴 직접 수량을 표현하려면 L 또는 l로 끝나야 합니다. 샘플 코드는 다음과 같습니다.
long a = 10000000000; //会有编译错误,因为10000000000编译器认为是int类型,而这个值,已经超出了int的范围 long b = 10000000000l; //正确 long a = 10000000000; //会有编译错误,因为10000000000编译器认为是int类型,而这个值,已经超出了int的范围 long b = 10000000000l; //正确
큰 정수 연산에는(표현 범위 int를 초과하는) long 타입을 사용할 수 있습니다. 샘플 코드는 다음과 같습니다.
long distance1 = 10000 * 365 * 24 * 60 * 60 * 299792458l; //必须有一个long型数据参与的运算结果才是long型 System.out.println("distance1="+distance1);//distance1=547836957965889536 结果正确 long distance2 = 10000 * 365 * 24 * 60 * 60 * 299792458; System.out.println("distance2="+ distance2); //distance2=-1973211136 溢出,=号后面的数据默认为int类型,超出了范围,发生溢出。 long distance1 = 10000 * 365 * 24 * 60 * 60 * 299792458l; //必须有一个long型数据参与的运算结果才是long型 System.out.println("distance1="+distance1);//distance1=547836957965889536 结果正确 long distance2 = 10000 * 365 * 24 * 60 * 60 * 299792458; System.out.println("distance2="+ distance2); //distance2=-1973211136 溢出,=号后面的数据默认为int类型,超出了范围,发生溢出。
JDK는 System.currentTimeMillis() 메서드를 제공합니다. 이 메서드는 1970년 1월 1일 0시부터 0시까지 경과된 밀리초 수를 반환합니다. 지금은 데이터가 너무 커서 데이터 형식이 길어요. 샘플 코드는 다음과 같습니다.
long time = System.currentTimeMillis(); System.out.println(time); //输出的结果为: 1383835712828 long time = System.currentTimeMillis(); System.out.println(time); //输出的结果为: 1383835712828
위 코드에서 볼 수 있듯이 출력 결과가 int 유형의 최대값을 초과했습니다. 따라서 JDK에서 설계한 반환 유형이 길어서 이 메소드는 다음과 같습니다. 타이밍 작업에 자주 사용됩니다.
前面所学习的int、long都是用于存储整数的,小数即为浮点数,包括: float(单精度)和double(双精度),double类型的精度值是float类型的两倍,因此而得名双精精,在实际的应用开发中,float应用极少,大多数场合使用double表示浮点数。示例代码如下:
double pi = 3.14; double r = 8; double s = pi * r * r; System.out.println("s=" + s); // 输出的结果为:s=200.96 double pi = 3.14; double r = 8; double s = pi * r * r; System.out.println("s=" + s); // 输出的结果为:s=200.96
浮点数的直接量有两种写法:1)通常写法,如:3.14、314、0.1、.5。 2)科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方。
默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加“f”或“F”后缀。例如:
float f1 = 3.14 //编译错误,应该写成3.14f float f1 = 3.14 //编译错误,应该写成3.14f
2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样,
所以,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。示例代码如下所示:
double money = 3.0; double price = 2.9; System.out.println(money - price); //输出的结果是: 0.10000000000000009 double money = 3.0; double price = 2.9; System.out.println(money - price); //输出的结果是: 0.10000000000000009
如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal 类来实现。关于这一点,将在后续的章节中介绍。
字符类型char事实上是一个16位无符号整数(都是正数),这个值是对应字符的编码,Java字符类型采用Unicode字符集编码(通用码、统一码、万国码),而Unicode是世界通用的定长字符集,所有的字符都是16位来表示。例如:字符a实际的值为97,字符A实际的值为65,字符0实际的值为48。
字符直接量可以采用诸如:‘中’的形式,也可以采用16进制的表示形式,例如: ‘\u4e2d’,代码如下所示:
char c1 = ‘中’; //c1中存的是”中”的编码 char c2 = '\u4e2d'; //‘4e2d’为‘中’所对应的16位Unicode编码的16进制表示形式 System.out.println(c1); System.out.println(c2); char c1 = ‘中’; //c1中存的是”中”的编码 char c2 = '\u4e2d'; //‘4e2d’为‘中’所对应的16位Unicode编码的16进制表示形式 System.out.println(c1); System.out.println(c2);
如上代码的输出结果:c1的值为中,c2值也为中,但c1和c2内部存储的其实是”中”这个字符所对应的Unicode码,即:一个无符号的整数。
在对char型变量赋值时,可以采用如下三种方式:
方式一:
字符直接量:形如‘A’,变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。示例如下:
char c1 = 'A'; char c1 = 'A';
方式二:
整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。示例如下:
char c2 = 65; char c2 = 65;
Unicode形式:形如‘\u0041’,Unicode字符的16进制形式。示例如下:
char c3 = '\u0041'; char c3 = '\u0041';
字符直接量需要包含在一对’’单引号之中,那如果想表示单引号’的字符时,需要怎么表示?想表示回车、换行符时,怎么表示?
因为单引号为特殊意义的字符, 那么,对于不方便输出的字符可以采用转义字符来表示,示例代码如下:
char c = '\\'; System.out.println(c); //输出的结果为:\ char c = '\\'; System.out.println(c); //输出的结果为:\
常用转义字符如下图 – 2所示:
图- 2
boolean类型适用于关系、逻辑运算, 表示某个条件是否成立, 只允许取值true或false,true表示条件成立, 而false表示条件不成立。
boolean型变量经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系(此知识点,后续详细介绍)。boolean示例代码如下所示:
int age = 18; boolean isChild = age<16; System.out.println(isChild); // isChild的值为false boolean running = true; boolean closed = false; int age = 18; boolean isChild = age<16; System.out.println(isChild); // isChild的值为false boolean running = true; boolean closed = false;
不同的基本类型直接可以相互转化,主要有两种方式:
自动类型转化(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下图 - 3所示:
图- 3
强制转化:从大类型到小类型需要强制转换符,语法如下:
(需要转换成的类型)变量
因为大类型的精度值大于小类型,取值范围大于小类型,所以,当使用强制转化时,有可能会造成精度的损失或者溢出,所以,在使用强制转化时要求显式的告诉编译器,正在进行强制转换。
基本类型转化如下示例所示,注意强制转换时可能会造成的精度丧失和溢出。
int a = 100; int b = 200; long c = a + b; //自动将int转化为long long l1 = 1024l; int i = (int) l1; //需要加强制转化符由于1024在int的范围内,所以没有产生溢出 long l = 1024L * 1024 * 1024 * 4; int j = (int) l; //会产生溢出 System.out.println(j); // 结果为:0 double pi = 3.1415926535897932384; float f = (float) pi; //会造成精度的损失,因为单精度的精确度小于double System.out.println(f); //结果为:3.1415927 int a = 100; int b = 200; long c = a + b; //自动将int转化为long long l1 = 1024l; int i = (int) l1; //需要加强制转化符由于1024在int的范围内,所以没有产生溢出 long l = 1024L * 1024 * 1024 * 4; int j = (int) l; //会产生溢出 System.out.println(j); // 结果为:0 double pi = 3.1415926535897932384; float f = (float) pi; //会造成精度的损失,因为单精度的精确度小于double System.out.println(f); //结果为:3.1415927
如果在一个表达式中出现了多种数据类型,则运算结果会自动的向较大的类型进行转化,
示例如下:
//由于有long型的直接量参与,整个表达式的结果为long long distance = 10000 * 365 * 24 * 60 * 60 * 299792458l; //由于有double型的直接量599.0参与,整个表达式的结果为 double double change = 800 - 599.0; //结果为0.0,右边都是int型数据运算结果也为int类型,结果为0,再赋值给double 将0转化为 0.0 double persent1 = 80 / 100; //结果为0.8,右边表达式有double型直接量参与, 运算结果为double型 double persent2 = 80.0 / 100; //由于有long型的直接量参与,整个表达式的结果为long long distance = 10000 * 365 * 24 * 60 * 60 * 299792458l; //由于有double型的直接量599.0参与,整个表达式的结果为 double double change = 800 - 599.0; //结果为0.0,右边都是int型数据运算结果也为int类型,结果为0,再赋值给double 型,将0转化为 0.0 double persent1 = 80 / 100; //结果为0.8,右边表达式有double型直接量参与, 运算结果为double型 double persent2 = 80.0 / 100;
在前面所介绍的8种数据类型中,byte、char、short、int、long都表示整数类型,而整型的直接量为int,在实际使用中,为了方便使用,遵循了如下的规则:
int直接量可以直接赋值给byte、char和short,只要不超过其表示范围。示例如下:
byte b = 97; short s = 97; char c = 97; byte b = 97; short s = 97; char c = 97;
byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算。示例如下:
byte b = 97; int num = b + b; //num的值为194
相关视频教程推荐:Java视频教程
위 내용은 8가지 기본 데이터 유형은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!